A “stack” is whatever components or services your application “runs on”. It could really be made up of anything but generally contains at least four key components:
During the 70’s and 80’s most software was being released bundled up in other software (like an OS) or with licenses attached, and was “closed-source”, meaning developers weren’t able to contribute to, or share, the core code base.
In the early 90’s, however, with the rising availability of the internet, and the “dot-com” explosion, there came the “open-source movement”. Despite grumblings from companies like Microsoft and IBM, developers began making their projects and source code available to everyone.
As more and more software was being released, developers began finding the best tools and using them together consistently. It was then that the first stacks started brewing.
In 1991 the Linux operating system was released by Linus Torvalds, followed by the Apache web server and the PHP programming language in 1995. By 1996 MySQL was released and boom, the LAMP stack was born — Linux, Apache, MySQL, PHP.
While there were others, for many years, LAMP prevailed as the king of all stacks. It was free, and easy to get running, and thus became the popular choice among many business and startups.
By the early 2000’s, however, things began to change.
For nearly a decade PHP was the predominant language for backend web. It wasn’t until 2004, when Ruby on Rails was introduced, and Node.js in 2009, that PHP’s popularity began to wane.
In 2002 Nginx was released and quickly became a popular alternative to Apache as a web server and reverse proxy.
In 2008 MySQL was acquired by Sun Microsystems, which was later acquired by Oracle. At this point MySQL was no longer open source and alternatives had to be found.
There were some forks of MySQL, namely MariaDB, also around this time the NoSQL trend was becoming popular thanks to MongoDB, released in 2007.
With all the changes happening in the development world, there was an explosion of “stacks”. The whole concept of what a stack was changed.
The very popular MEAN stack was introduced in 2013 — MongoDB, Express.js, Angular.js, Node.js.
The interesting thing about the MEAN stack is that three of the four components are written in JavaScript. Where stacks traditionally consisted of four distinct components, one of which was a language. The language was now filling three of those roles.
At this point it became clear you could make a “stackronym” out of anything, as long as it was catchy and based on the components that ran your application.
Generally speaking, a platform is anywhere software is executed (like an operating system or browser).
Basically an application “runs on” a stack, and a stack “runs on” a platform. The stack provides everything for the application to run, while the platform provides the environment for the stack.
This has worked well for many years, but with the recent improvements to virtualization and containerization with things like Docker, we have the ability to again change the status quo.
You don’t want a platform that makes it difficult to manage your stack. You also don’t want a platform that doesn’t have the flexibility that your application needs.
You’ll encounter the “difficult” platform with a bare-bones service like AWS or DigitalOcean. It’s quite staggering the amount of knowledge and work that goes into configuring and managing an infrastructure.
You’ll encounter “inflexible” platforms when searching for a way to avoid difficult platforms, and end up landing on Platform as a service (PaaS). While PaaS abstracts away all the difficulties of the underlying infrastructure, it comes at the cost of flexibility and control.
What you really want, is probably the same thing that I want, which is what most developers want. A platform that does it all for you, but gives you the flexibility to configure when you need it.
It means that your platform and your stack are the same thing. Or rather, a good platform should completely replace your stack, and render it obsolete.
Instead of installing your stack on your local machine, you install it on a virtual machine, your platform, and just work inside of it. You can then share your environment with anyone, and deploy it wherever you want, whenever you want.
I like to call this micro-PaaS (μPaaS). The idea that your application’s platform lives with your application. Whether thats locally during development, or on production servers.
In my mind, the ideal platform would not only provide me with a development environment, but also give me a great way to deploy my application to production.
In most cases, developers have to either hand their applications off to some DevOps engineer to deploy and manage, or they have to try and fulfill that role themselves.
I don’t want to deal with the complexities of creating, configuring, and managing an infrastructure, and I don’t want a middleman doing it for me either.
I want a tool that allows me to be the DevOps engineer, or just does it all for me, which is why I’ve been working for Nanobox for the past 2 years, helping create such a tool.
Nanobox users Docker to create instant isolated development environments which are sharable, reliable, and can be deployed to production anywhere.
In my mind thats the perfect platform, and whatever stack I use doesn’t matter.