Glue kicked off this morning with some great keynotes and a full set of breakouts. I was clipping along happily, enjoying Rachel Chalmers keynote on "Social Glue" and contemplating the fascinating relationship between the use of well-designed interfaces (API) between systems and services as a means to scale the human side of the equation when Solomon Hykes, creater of Docker, took the stage to discuss containers and the Internet as a platform.
Most of what Solomon discussed resonated; the Internet is increasingly seen as "the platform" on which developers want their apps to run; applications should be made of discrete, logical loosely-coupled composable components; the Internet has never been "shut down" for maintenance since it was turned on in the late 1960s.
But then Solomon said something I didn't agree with, that didn't resonate and that, given the shift toward software-defined networking, didn't make sense to me.
"Networks can't run code."
Ah,I said to myself, but they can. Especially if you don't relegate "the network" to layers 2 and 3 of the OSI stack.
But of course, he did.
Now, I'm not trying to pick on Solomon because his perspective is not atypical of developers. In fact, I'd say it's prototypical. Archetypical even. It's a common perception that "the network" is layers 2 and 3, routing and switching, the pipes that make up the Internet.
But that's increasingly problematic. The "network" that is the platform on which developers want to run their applications comprises a full complement of services from layer 2 through layer 7. That includes HTTP, SPDY, TLS and SSL, as well as the "everybody's favorite transport protocol", TCP.
Many of these services, these "network middleboxes", as they are so often referred to, do indeed run code. And run code quite well. And increasingly operations are concerned with exactly how to run code on those devices because the variety and diversity of applications, clients, and environments is simply too complex to natively support at those layers of the network with pre-defined tables that describe how to deal with a given connection or request.
"The Network" most certainly can - and does - run code. And the more we software-define it, and introduce new technologies designed to support rapid provisioning of services in support of accelerating application deployment, the more the network is going to "run code" because it has to if we're going to achieve the levels of flexibility and customization needed to scale the next generation of application architectures.