Software Disaggregation

Software disaggregation has the goal to modularize the different functionalities in a networking device (Forwarding agents, Chipset drivers,Operating system), and by that allowing mixing and matching them as needed. This allows parallel innovation on all layers of the stack, and a best of breed approach for all soft and hardware components.

OpenFlow, specified and marshaled by the Open Networking Foundation, was one such effort, where the concept of control plane and data plane separation was key. The primary short coming with OpenFlow stemmed from taking a top down approach to modeling a generic forwarding table, which failed to adequately consider current and future Network Processor capabilities. Part of this might also have been enforced by OpenFlow having been developed as a result of Stanford's Clean Slate project, a project that looked into the question how we would design the Internet from scratch today, with 20-30 years of hindsight but no backward compatibility in mind.

As chipsets were not really ready for this approach, it was leading to a lowest common denominator feature set in a multivendor environment.

In contrast, the Open Compute Project's Switch Abstraction Interface (SAI) took a bottom up approach that started with developing chipset neutral abstractions that were closely aligned with the network functions the current chipsets were able to support. It also focused on existing, industry relevant use cases, and did not try to completely change the way forwarding happens, but instead open up the existing routing protocols to software based control.

Whether taking a top down or bottom up approach, the goal is to provide a basis for separating software from hardware which provides one form of disaggregation. Additional Software efforts have focused on changing the approach to managing network protocol execution and management to be more aligned with methods used to manage linux services at scale. A few such, as SONiC, provide ability to pick an choose the set of modularized protocol components you want to deploy on a given device.