This section provides a high-level view of ONOS, and its general design approach.

ONOS in a Sentence

Aside from being an SDN OS, ONOS is a multi-module project whose modules are managed as OSGi bundles. 

Design Goals

ONOS is designed with a few points in mind:

We take a succinct look at each below.

Run-Time Extensibility

ONOS is written to leverage Apache Karaf as its OSGi framework. In addition to dependency resolution at startup and dynamic module loading at runtime, Karaf provides the following:

Code Organization and Modularity

The project is comprised of a set of sub-projects, each with their own source tree that can be built independently. To do this, the ONOS source tree is organized in a hierarchical fashion that takes advantage of Maven's notion of a hierarchical POM file organization. Each sub-project has its own pom.xml file, and intermediate directories have parent aggregate pom.xml files. The latter contains shared dependencies and configurations for those sub-projects, enabling them to be built independent of unrelated sub-projects. The ONOS root contains the top-level pom file used to build the full project and all of its modules.

For implementation details of the source tree and POM file organization, refer to [Appendix C] of the Developer's Guide.

Protocol Agnosticism

While currently focused on OpenFlow, a southbound API shields the ONOS core layer and its platform-resident applications from the specifics of a particular protocol library.