.. 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 Version 2 License <http://www.apache.org/licenses/LICENSE-2.0>`_.


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 <https://assets-global.website-files.com/60b1962ffda0a42f779c765b/60d700623d931ee5ed9093d2_O-RAN%2BSoftware%2BLicense%2Bv.1.0_6-11-19_clean.pdf>`_.


Creative Commons Attribution 4.0 International License
------------------------------------------------------
All documentation in O-RAN SC will be received and made available by the Specification,Code Project under the Creative Commons Attribution 4.0 International License.
