.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. SPDX-License-Identifier: CC-BY-4.0

O-RAN SC license
================

The O-RAN Software initiatives are focused on aligning a software reference implementation with the O-RAN Alliance's open architecture and specifications. The aim is to achieve a solution that can be utilised to unify and accelerate the evolution and deployment in the RAN. The community has been setup to promote open source but also to address wireless technology support for essential patents.
more infomation can be found at https://www.o-ran.org/software.


Apache 2.0 License
------------------
The O-RAN Software Community is a Linux Foundation project supported and funded by O-RAN to lead the implementation of the O-RAN specifications in Open Source. The project leverages the Apache 2.0 License.


O-RAN Software License
----------------------
The O-RAN Specification Code Project is an O-RAN Alliance project. Its objective is to allow contributions that will acknowledge essential patents. The project leverages the O-RAN Software License.



