/* SPDX-License-Identifier: BSD-2-Clause */
/**
* @file
*
* @ingroup RTEMSImplDoxygen
*
* @brief This file exists to provide a top level description of RTEMS for
* Doxygen.
*/
/*
* Copyright (C) 2021 embedded brains GmbH & Co. KG
* Copyright (C) 1989, 2014 On-Line Applications Research Corporation (OAR)
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @mainpage
*
* The Real-Time Executive for Multiprocessor Systems (RTEMS) is a
* multi-threaded, single address-space, real-time operating system with no
* kernel-space/user-space separation. It is capable to operate in an SMP
* configuration providing a state of the art feature set.
*
* RTEMS and all third-party software distributed with RTEMS which may be
* linked to the application is licensed under permissive open source licenses.
* This means that the licenses do not propagate to the application software.
* Most of the original RTEMS code is now under the [BSD 2-Clause
* license](https://git.rtems.org/rtems/tree/LICENSE.BSD-2-Clause). Some
* code of RTEMS is under a legacy license, the [modified GPL 2.0 or later
* license with an exception for static
* linking](https://git.rtems.org/rtems/tree/LICENSE). It exposes no license
* requirements on application code. Everything necessary to build RTEMS
* applications is available as open source software. This makes you
* completely vendor independent.
*
* RTEMS provides the following basic feature set:
*
* - @ref RTEMSAPI
*
* - POSIX with
* [pthreads](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html)
* (enables a broad range of standard software to run on RTEMS)
*
* - @ref RTEMSAPIClassic
*
* - C11 (including
* [thread](https://en.cppreference.com/w/c/thread) support)
*
* - C++11 (including
* [thread](https://en.cppreference.com/w/cpp/thread>) support)
*
* - Newlib and GCC internal
*
* - Programming languages
*
* - C/C++/OpenMP (RTEMS Source Builder, RSB)
*
* - Ada (RSB, ``--with-ada``)
*
* - Erlang
*
* - Fortran (RSB, ``--with-fortran``)
*
* - Python and MicroPython
*
* - Parallel languages
*
* - [Embedded Multicore Building Blocks](https://embb.io/)
*
* - [OpenMP](https://www.openmp.org/)
*
* - Thread synchronization and communication
*
* - Mutexes with and without locking protocols
*
* - Counting semaphores
*
* - Binary semaphores
*
* - Condition variables
*
* - Events
*
* - Message queues
*
* - Barriers
*
* - [Futex](@ref RTEMSScoreFutex) (used by OpenMP barriers)
*
* - Epoch Based Reclamation (libbsd)
*
* - Locking protocols
*
* - Transitive Priority Inheritance
*
* - OMIP (SMP feature)
*
* - Priority Ceiling
*
* - MrsP (SMP feature)
*
* - Scalable timer and timeout support
*
* - Lock-free timestamps (FreeBSD timecounters)
*
* - Responsive interrupt management
*
* - Thread-Local Storage (TLS) as specified by C11/C++11 and later standard
* revisions
*
* - Link-time configurable schedulers
*
* - Fixed-priority
*
* - Job-level fixed-priority (EDF)
*
* - Constant Bandwidth Server (experimental)
*
* - Clustered scheduling (SMP feature)
*
* - Flexible link-time configuration
*
* - Job-level fixed-priority scheduler (EDF) with support for one-to-one
* and one-to-all thread to processor affinities (default SMP scheduler)
*
* - Fixed-priority scheduler
*
* - Proof-of-concept strong APA scheduler
*
* - Focus on link-time application-specific configuration
*
* - Linker-set based initialization (similar to global C++ constructors)
*
* - Operating system uses fine-grained locking (SMP feature)
*
* - Dynamic memory allocators
*
* - First-fit (default)
*
* - Universal Memory Allocator
* ([UMA](https://www.freebsd.org/cgi/man.cgi?query=uma&sektion=9),
* libbsd)
*
* - File systems
*
* - IMFS
*
* - FAT
*
* - RFS
*
* - NFSv2
*
* - JFFS2 (NOR flashes)
*
* - [YAFFS2](https://git.rtems.org/sebh/rtems-yaffs2.git/)
* (NAND flashes, GPL or commercial license required)
*
* - Device drivers
*
* - Termios (serial interfaces)
*
* - I2C (Linux user-space API compatible)
*
* - SPI (Linux user-space API compatible)
*
* - Network stacks (legacy, libbsd, lwIP)
*
* - USB stack (libbsd)
*
* - SD/MMC card stack (libbsd)
*
* - Framebuffer (Linux user-space API compatible, Qt)
*
* - Application runs in kernel-space and can access hardware directly
*
* - [libbsd](https://git.rtems.org/rtems-libbsd/)
*
* - Port of FreeBSD user-space and kernel-space components to RTEMS
*
* - Easy access to FreeBSD software for RTEMS
*
* - Support to stay in synchronization with FreeBSD
*/