OpenSwitch is a Linux-based Network Operating System for bare-metal switches. Unlike his predecessors, it aims to provide a full feature set and create an open source community of developers around it. In this talk we will review the general architecture of the system and the design aspects related to adding new functionality: how to work with the central database, interaction with the devops-oriented and human-oriented interfaces, interaction with the abstraction layers for the switching ASICs, and requirements to port it to new hardware platforms. We will also walk thru the developer environment and how to get started in the developer community. You can also expect to get updates on current roadmap of the project.