summaryrefslogblamecommitdiffstats
path: root/cpukit/doxygen/mainpage.h
blob: 6eb0de7b36c2b8d37e65a3fe2f1ba3d41a8b0bf0 (plain) (tree)



















































                                                                               
                                                                             
























































































































































                                                                                            
/* 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
 */