Network programmability means democracy, means freedom, freedom to program across all layers and entities, software or hardware – depending on your needs. Is SDN required to have network programmability? Not at all. Does the SDN architecture leverage network programmability? Yes, of course.  So, why do many people equate network programmability and SDN?

Programmability: Programming the network means accessing an API that provides the appropriate abstraction for the required network function – and that abstraction may be network-wide or network-device specific. Whether you need a tenant-network, and use the OpenStack Quantum API, or whether you need to find out the best place for your server or video cache in the network and use an IETF ALTO API, or whether you need a device control API and use Cisco’s onePK – you will peer with the appropriate network or device plane and function that serves your needs. Programmability is of course not limited to application to network interaction. Different infrastructure software components will peer with and rely on each other to fulfill the desired needs of a user. Both interaction as well as integration are fueled by programmatic interfaces.

Single pane of glass? When discussing APIs, often people talk about the need for a “single pane of glass” to the network – apparently we need to follow the needs of the people, and there are different groups of people – operators, application programmers, infrastructure software programmers – not all of them need the same “pane of glass” – they need multiple views onto the very same system – much like a car mechanic and the driver of a car require very different access methods to the very same car. And while on the topic – “pane of glass” is a bit misleading as well – if I’m a programmer, I don’t want a pane of glass between me and the network – I want direct access, I want a set of APIs with associated libraries that I can link into my programs and drive the behavior. Remember, programmability provides new freedoms.

Programmability != SDN: As already mentioned above, programmability and SDN are of course not the same. SDN is an architectural approach which leverages device programmability for flow control typically using the OpenFlow protocol. The traditional SDN architecture is hierarchical: Applications – Control Programs – Controller – Devices. This means if you’re a device your only peer is the controller, its manager. The device won’t talk to anyone else – period.
Consequently, programmability is a prerequisite of hierarchical, SDN-type architectures. But you do not require SDN to have programmability. Programmability also supports open peering architectures, where communication patterns are less constraint and information flows follow the needs of the particular use-case and application. One of the key pillars of Cisco ONE is programmability – and it is important to highlight that Cisco ONE allows for but does not mandate or require the use of an “SDN Controller”.