In the embryonic stages of the internet age (the 1950's - 1960's) most software was being created by researchers who were openly collaborating on their code bases.
As operating systems and language compilers began to evolve, the notion of shared software came into question. In 1976 Bill Gates wrote an open letter to hobbyists discouraging the sharing of software, and by 1979 IBM began introducing the first software licenses.
It wasn't until the early 80's that "open-source" software as we know it today began brewing. Richard Stallman started the whole movement with the GNU project, and by the early 90's "open-source" was really gaining traction, thanks in a huge part to... the internet.
In the beginning, there was LAMP: Linux, Apache, MySQL, PHP.
In 1991 Linux was released. By 1995 Apache and PHP were available, and MySQL was released in 1996, and boom, LAMP was born... almost.
There was still a lot of other open-source stuff available around this time, and developers were just trying to find the best way to use it all.
As developers were putting all this open-source software together in the most effective ways they could think of, that's when the notion of "stacks" emerged.
By the late 90's LAMP became the clear leader, and the concept of a software "stack" has only grown since then.
What is a Stack?
A "stack" is the collection of services and components that go into creating a complete system for supporting an application. Apps "run on" their respective stacks.
A stack could be made up of any number of components, but what generally ends up distinguishing them as a stack are four major components:
- An operating system
- A web server
- A database
- A programming language
These four components, combined with everything else that goes into making an application, are what make up the app's "stack".
For many many (many) years, LAMP was the only stack...
Say you have a web application that uses Node.js as the web server, Express.js as the app control layer (API, models, etc.), MongoDB as the database, and Angular.js as the presentation layer. This particular stack is known as the MEAN stack, which was first introduced in 2013.
Since then, "stacks" have really exploded. In fact, today, there are over two dozen "official" stacks that a developer can choose from.
The reality is though, you can make a "stackronym" out of almost anything you choose to build your application with... let's do one really quick!
Let's see... the LARP stack: Linux, Apache, Ruby on Rails, and Postgres. There we go, the next big stack (used by RPG fans everywhere).
The Evolution of Stacks
So now we're kind of back where we started.
Just like open-source software was all "wild west" back in the day, and we started grouping it into stacks, our stacks are getting out of control and need to evolve.
What is a Platform?
In general terms, a platform is any place where software is executed. Some examples of a platform are:
- An operating system
- A browser
- A software framework
- A VM
- Some combination of the above
Platforms are really just layers of abstraction and are sometimes viewed as constraints to the development process because they are just too... abstract.
What you really want is a platform that gives you everything you want, with nothing you don't. Obvious right?
What you don't want
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 you'll need for your application.
You'll encounter the first type of platform when looking at something like bare-bones IaaS (AWS, DigitalOcean, etc.). The amount of knowledge and work that goes into configuring and managing an infrastructure is actually pretty staggering.
You'll encounter the second type of platform when searching for a way to avoid the first type of platform, and end up landing on Platform as a service (PaaS).
PaaS abstracts away all the difficulties of the underlying infrastructure, generally at the cost of flexibility and control.
What you do want
You want something that just does it all for you. That's what most people want...
Stack vs. Platform
If your application "runs on" a stack, then your stack "runs on" a platform. Easy enough.
So if a platform runs a stack, and a stack runs an app. Bringing both together in one place, so that neither gets in the way of development, would be the most ideal.
(Last pun, I promise.)
The reality is that a good platform can, and should, replace stacks.
Stacks emerged as a means to make the setup process easy. Since platforms do all that now, the "stack" doesn't matter anymore and is going the way of the dinosaur.
There is an interesting thing happening in the tech world right now where application developers are being asked to not only build applications but then figure out how to deploy them to production.
In some cases, developers will work with someone from DevOps to do this, but it's really less than ideal. It would be nice to cut out the middleman, both in terms of a literal person, and the notion of a "full-stack" developer.
If developers didn't have to worry about configuring and managing infrastructures they would focus on what they really care about, and are really good at. Building applications.
The whole idea here is to make DevOps available to everyone, because...
The Ideal Platform for Developers
Nanobox is a platform that encompasses the entire development to production workflow.
Applications are developed locally in isolated environments, and then can be deployed anywhere, by the developer. No more middleman.
Nanobox makes it so that developers don't need to be full-stack anymore, or hand their applications off to someone else to deploy. A developer can control the entire lifecycle of their application from dev to production.
Personally, as a developer, this is something I've been waiting for, for a long time... because I love having cake AND eating it too (although I'm more of a pizza person).