What is a software stack?
A software stack is a collection of independent components that work together to support the execution of an application. The components are stacked one on top of each other in a hierarchy that can include an operating system (OS), architectural layers, protocols, runtime environments, programming language, applications, databases and function calls.
Typically, the lower-level components in the hierarchy interact with hardware, while the higher-level components perform specific tasks and services for the end user. Components communicate with the application through a series of complex instructions that traverse the stack.
Why are software stacks important?
Software stacks make it easier to create and deploy applications and websites. They reduce compatibility issues, optimize functionality and enhance system performance and productivity. The layers of software that make up these stacks work together to facilitate development projects. The parts of the stack are tailored to meet the needs of a particular system or purpose.
Software stacks define the hardware and network resources needed for app and website development projects. This framework simplifies the development process, making it more efficient and scalable.
This article is part of
What is configuration management? A comprehensive guide
Numerous stacks have been developed over the years. It's important to select the right stack for the project. Developers can also build stacks based on their own requirements.
Parts of a software stack
Software stacks can be simple or complicated, depending on the desired application functionality. They can incorporate components and services from an organization's on-premises resources; third-party providers, such as software-as-a-service vendors; or a cloud provider. There's no baseline standard for the components and services that must be in a software stack, except that their features and functions must support an application's development, delivery and operation.
Depending on the desired application, this could be at a minimum: an OS, database, tools to support a programming language and the application. Other components that can make up a more complicated software stack include abstracted physical resources, virtualization, scheduling and orchestration, databases, computing, networking, security and a user interface.
Software stack vs. technology stack
The simplest distinction between a software stack and a technology stack is implied in their names. A software stack incorporates only software components required to run an application, some of which could be virtualization or abstracted physical hardware resources. A technology stack includes both software and hardware components of IT infrastructure.
A full technology stack includes all aspects of IT infrastructure required to deploy and manage applications and services: hardware and software components, databases, middleware, storage and networking. In modern enterprise IT, software increasingly makes up more of these stacks.
There are many types of technology stacks. Some are constructed to deliver a technology product or service, while others support a business purpose. Examples include the following:
- Server stack. This includes the hardware, OS and supporting software, such as runtime environments, database software and software for various web services.
- Storage stack. This includes servers and server software, virtualization and networking components.
- Cloud infrastructure stack. This includes abstracted infrastructure, both physical and virtualized hardware resources; platform infrastructure, such as application servers and databases; and applications and services. A vast array of more granular services and functions can be added throughout a cloud infrastructure stack, such as machine learning, security and monitoring.
- Marketing stack. This includes an email platform, a content management system and customer relationship management software. Marketing stacks also have analytics and tracking tools.
- Web stack. This is used when building websites and web applications. Web stacks include an OS, programming language, database management component and a web server component. Once a stack has been developed, it can be used repeatedly for other projects. Front-end web stacks enable the user interface. Back-end web stacks are for administration functions. Full web stacks provide all resources needed to establish a website. Development teams might need expertise in front-end frameworks, back-end development software and a comprehensive set of technologies to optimize functionality.
Examples of software stacks
Many software stack components are chosen frequently enough that their names or an acronym representing their core components are commonly recognized. Examples of common enterprise software stacks include the following.
LAMP
LAMP, which stands for Linux, Apache, MySQL and, in this case, PHP, is a well-known software stack for web development. The lowest layer of the stack's hierarchy is the Linux OS, which interfaces with the Apache web server. MySQL serves as the relational database management component. The highest layer of the hierarchy is the scripting or programming language. The P can also stand for the Python or Perl programming languages.
LAMP stacks are popular because the components are all open source, and the stack can run on commodity hardware. Unlike monolithic software stacks that are often tightly coupled and built for a particular OS, a LAMP stack is loosely coupled. This means that while the components weren't originally designed to work together, they are complementary and are often used together. LAMP components are included in almost all Linux distributions. Developers can swap MySQL for PostgreSQL to create a LAPP stack. A LEAP stack -- Linux, Eucalyptus, AppScale, Python -- is another flavor of this open source software stack, for cloud-based development and services delivery.
WISA
WISA is a Microsoft-proprietary stack that uses Windows Server as the OS. Internet Information Services (IIS) handles the web server component. SQL Server is the database manager, and ASP.NET is the programming language framework. It's considered an effective stack for developing complex websites and apps.
MEAN
MEAN is a stack of development tools that eliminates the language barriers often experienced in software development. The foundation of a MEAN stack is MongoDB, a NoSQL document data store. The Hypertext Transfer Protocol server is Express. Angular is the framework for front-end JavaScript. The highest layer of the stack is Node.js, a platform for server-side scripting. MEAN doesn't rely on a specific OS, which gives developers more flexibility. It also uses JavaScript, which is a ubiquitous programming language. Developers can use Ember instead of Angular, which creates a MEEN stack, or they can use Vue.js as the front-end development framework in a MEVN stack.
Apache CloudStack
Large enterprise customers and service providers use this open source cloud management stack to provide infrastructure as a service. CloudStack provides developers with multiple layers of optional services as well as support for a variety of hypervisors and application programming interfaces (APIs).
GLASS
This stack for web application development uses Grails as the web framework, Linux as the OS, Apache for the web server, the Spring framework for business logic development and the Scala programming language.
Software stacks can become complex as organizations increasingly use containers, distributed architectures and tie-ins to cloud platforms and services. Software configuration management can be used to strengthen and standardize software development, improve reporting and change management, and help allocate resources to development projects.
Benefits and challenges of software stacks
When stack components communicate through open and standard protocols and APIs, the components become interchangeable with other components that use the same APIs. This makes it possible for a virtual machine running Linux to run on the Windows OS and change from a LAMP stack to a virtual WAMP stack.
However, when a stack is loosely coupled, it can be a challenge to optimize performance. Each component must be individually analyzed and tuned, which calls for specific skill sets.
Front-end, back-end and full software stacks
Job postings for software stack developers often call for candidates with experience in specific layers of a specific software stack. For example, a posting for a front-end developer might require the candidate to know HTML5, cascading style sheets, Asynchronous JavaScript and Extensible Markup Language and JavaScript Object Notation.
Conversely, a back-end LAMP developer position might call for server-side scripting skills such as PHP, but also require the candidate to know object-oriented programming, how to optimize a database for write-intensive applications and how to write RESTful APIs. Programming languages typically used in back-end software stacks include Python, Ruby and C++.
A posting for a full-stack developer typically requires the candidate to be able to do for everything from patching OSes to translating a user experience team's wireframe designs into code. This is a demanding job that requires the candidate to be familiar with every layer of the stack.
Organizations running complex, multi-cloud environments need full-stack observability, but it's not easy to accomplish. Get some tips on how to achieve full-stack observability.