Making the Network Programmable (and Open for Tinkering)
Paraphrasing author and digital rights activist Cory Doctorow, engineers love to tinker and that freedom must be an implicit feature of the set of platforms you're using. The more they expose internal architecture and assets via easily digestible interfaces, the more you can exert creative influence on them, typically in the form of code that changes, improves or extends the platform behaviors in new ways. The joy of tinkering is the joy of creating art, whether it's the WordPress credo that "Code is Poetry" or a co-worker's claim that good code sings to you. Extending a platform is the bluesy twang of tinkering with TCP sockets rather than a socket wrench, but just as rewarding when you create something that hasn't been seen before.
But unless you're adept at writing protocols or packet filtering tools, chances are you don't immediately think of networking equipment as one of those nicely abstracted, programmable platforms. Networking falls on the IT department's side of the deployment fence: 'make it work as a black box, nothing to see here, keep the bits moving.' The territorial split between deployment and development has existed for as long as we've had systems to deploy (I'm betting Turing argued about how to move the theoretical tape on his machine, but I digress), and yet we've seen that recent trends in virtualization have made developers at least think about how their applications are packaged and deployed, what their storage requirements look like and how they can be made more available through multiple parallel instances. Better abstraction of the underlying general purpose compute platform has made parts of IT-land more interesting (out of necessity) to developers, mostly because abstraction hides some of the messy details of what's between your compiler output and the iron.
However, those messy details heavily impact performance, scale and security. And it's not just on the compute and storage fronts: as a developer, the user experience derived from your code is increasingly a function of the network. Predictable, reliable end-to-end network behavior over a wide range of operating conditions and constraints is the new ingredient brand, much as "Intel Inside" defined the corresponding PC attributes through the explosion of desktop computing. You need the network exposed such that it can be smarter about your code, and your code can optimize its use of network resources.
That's our goal of making the New Network programmable - it makes applications aware of the network and the network aware of its set of applications. And along the way, it may make IT and development better friends.
What can networks and applications tell each other? We'll dive into the details next time.