A software stack is a collection of independent components that work together to support the execution of an application. The components, which may include an operating system, architectural layers, protocols, run-time environments, databases and function calls, are stacked one on top of each other in a hierarchy. Typically, the lower level components in the hierarchy interact with hardware, while the higher level components in the hierarchy perform specific tasks for the end user. Components communicate directly with the application through a series of complex instructions that traverse the stack.
Examples of software stacks
LAMP (Linux, Apache, MySQL, PHP) - a well-known software stack for web development. The lowest layer of the stack’s hierarchy is the Linux operating system. The highest layer of the hierarchy is the scripting language -- in this case, PHP. (Note: the “P” may also stand for the programming languages Python or Perl). LAMP stacks are popular because the components are all open source and the stack can run on commodity hardware. Unlike monolithic software stacks, which are often tightly coupled and often built for a particular operating system, a LAMP stack is loosely coupled. This simply means that while the components were not originally designed to work together, they have proven to be complementary and are often used together. Today, LAMP components are now included in almost all Linux distributions.
Apache CloudStack - an open source cloud management stack used by large enterprise customers and service providers who provide Infrastructure-as-a-Service (IaaS). CloudStack provides developers with multiple layers of optional services as well as support for a variety of hypervisors and application program interfaces (APIs).
Benefits and challenges of software stacks
When stack components communicate through open and standard protocols and application program interfaces, the components become interchangeable with other components that use the same APIs. This makes it possible for a virtual machine (VM) running LINUX to run on the Windows operating system and change from a LAMP stack to a virtual WAMP stack. When a stack is loosely coupled, however, it can be challenging to optimize performance. Each component needs to be individually analyzed and tuned, which calls for very particular skill sets.
Front end, back end and full software stacks
A posting for a full stack LAMP developer typically expects the candidate to be responsible for everything from patching the operating system to translating a user experience (UX) team’s wireframe designs into code. This type of job can be very demanding because it requires the candidate to be very familiar with every layer of the stack.