We’ve abstracted many things you and I. But its time to crack the next nut. Let me explain why.
I started out managing applications on bare metal x86 and AIX servers. In those days we were updating the operating systems to the latest releases, patching with security updates, and ensuring our dependencies were set up in such a way that the whole system would run. In a way, its pretty amazing that the whole complex stack operated as well as it did. So many dependencies, abstracted away so that we didn’t have to worry about the application opening up the token ring port and we could just use a trusted stack to send things on its way. Life was good, but it sucked at the same time: It was slow to provision servers, boot times were atrocious especially when UEFI made boot times even longer, and it was monolithic and scary to touch.
I remember one company I visited had their entire business records (not backed up) on one server that was choking under the load. I came in there and pxebooted that server, ran some partimage magic and migrated the server to another big beefier server. It was the first cold migration I had ever performed. I felt like an all powerful sorcerer. I had intergalactic cosmic powers. High Fives all around.
I started virtualization with Xen, then KVM. VMware was something the windows guys were doing, so I wasn’t interested. Then I realized it was based on Red Hat Linux (it has since changed) so my powers were summoned again. I started helping get application running on Virtual Machines. I did the same thing: I installed the operating system to the latest release. I applied security patches, and then I made sure the latest dependencies were set up in such a way that the application would run.
But here my magical powers were obsolete. People were desensitized to vMotion demos. Oh, you had to shut off that machine to migrate it to another server? We can migrate it while its still running. Watch this, you won’t even drop a ping. People started making the case that hardware was old news. Why do you care which brand it is?
We could make new VMs quickly, more efficiently use our servers, (remember how much people said your power bill would drop?), and maintenance of hardware was easier.
All our problems were solved, as long as we paid VMware our dues.
But VMware was for infrastructure guys. The new breed of hipsters and brogrammers were like: I don’t care what my virtualization is, nor my hardware, as long as its got an API, I can spin it up. So we would start getting our applications working on AWS. But here we as systems dudes started abusing Ruby to create super cool tools like Puppet or Chef and started preaching the gospel of automation. And so when I would get applications running on the cloud, I would install the latest operating system, apply security patches, make sure my latest application dependencies were there and then run the operating system.
My magical powers of scripting came back in force. I was a scripting machine. Now I didn’t care about the hardware, nor the virtualization platform. I just got things working. All the problems were solved as long as I paid my monthly AWS bill.
Adrian Cockcroft told me and thousands of my closest friends at conferences that I didn’t have to worry about the cost, because I needed to optimize for speed. If I optimized for speed projects would get done ahead of time so I would save money and because my projects were iterating quickly I would make more money. We took our scripts and fed them to robots like Jenkins so we could try all our experiments. We would take the brightest minds of our days and instead of having them work out ways to get people to Mars or find alternate power sources we would have them figure out how to get people to click on ads to make us money. God bless us, everyone.
But we still had to worry about the operating system.
We took a side look at PaaS for a second. Because they said we wouldn’t have to care about the OS, nor the dependencies because they would manage it for us. The problem was
1. Our applications were artistic snowflakes. We needed our own special libraries and kernel versions. You think our applications are generic? Yeah, it was great if we were setting up a wordpress blog, but we’re doing real science here: We’re getting people to click on ads for A/B testing. ‘Murica. So your PaaS wasn’t good enough for us. And our guys know how to do it better.
2. We heard that it wouldn’t scale. Let alone that we were using Python and Ruby that was never really meant to scale into the atrocious applications that became Twitter and others. Typed languages are so easy, so we used them.
So for our one-offs, we still use PaaS but for the most part, we still install operating systems to the latest versions, install security policies and patches, and ensure our dependencies are up so we can run the applications.
We weren’t supposed to worry about the operating system, but we did.
Containers and Microservices
A cute little whale, handcrafted with love in San Francisco, then stole our hearts by making it easy to do things that we were able to do years ago. The immutable architecture with loads of services in separate pieces would come our way and save us from the monolith. A container a day keeps the monolith away is what it says on the T-shirt they were handing out. I got tons of cool stickers that made me feel like a kid again and I plastered them all over my computer.
I started breaking up monoliths. At Cisco, our giant ordering tool based on legacy Oracle databases and big iron servers was broken up and each piece was more agile than the next. We saw benefits. Mesos and Kubernetes are the answers to managing them and Cisco’s Mantl project will even orchestrate that. Its really cool actually!
So how do I get a modern micro services application running today? I create a Dockerfile that has the OS. Then I do apt-get update to make sure all the dependencies are in place. I use Mesos or Kubernetes to expose ports for security. Then I make sure the dependencies are installed in the Operating system in the container. And we’re off.
Mesos even has something called the Data Center Operating System (DCOS). It runs containers. But containers still run Operating Systems. We’re still worrying about the operating system for our applications!
We’re still crafting operating systems. We’re still managing them. We’ve started down a journey of abstraction to deliver applications, but we haven’t cracked the final nut: We need to make the operating system irrelevant, just as we’ve made the hardware and virtualization platform irrelevant. The things we’re doing with scheduling across other containers used to be something the OS would deliver on a single box, but that’s not happening anymore due to the distributed nature of applications.
AWS has shown us lambda which is a great start in this direction. Its a system that just executes code. There’s no operating system, just a configuration of services. It’s a glimpse into the future of what the new modern day art of the possible will be. As we start to break down these micro services deeper in to nano services or just function calls, we need to get away from having to worry about an operating system and just a platform that runs the various components of our micro service-ized application.
We’ve gotten leaner and leaner and the people that figure this out first, and give applications the best experience to run without requiring maintenance of operating systems will win the next battle of delivering applications.
We abstracted hardware, the virtualization platform, and our services. Now its time to go to eleven: Get rid of the operating system.