1.. _introducing_zephyr:
2
3Introduction
4############
5
6The Zephyr OS is based on a small-footprint kernel designed for use on
7resource-constrained and embedded systems: from simple embedded environmental
8sensors and LED wearables to sophisticated embedded controllers, smart
9watches, and IoT wireless applications.
10
11The Zephyr kernel supports multiple architectures, including:
12 - ARC EM and HS
13 - ARMv6-M, ARMv7-M, and ARMv8-M (Cortex-M)
14 - ARMv7-A and ARMv8-A (Cortex-A, 32- and 64-bit)
15 - ARMv7-R, ARMv8-R (Cortex-R, 32- and 64-bit)
16 - Intel x86 (32- and 64-bit)
17 - NIOS II Gen 2
18 - RISC-V (32- and 64-bit)
19 - SPARC V8
20 - Tensilica Xtensa
21
22The full list of supported boards based on these architectures can be found :ref:`here <boards>`.
23
24Licensing
25*********
26
27Zephyr is permissively licensed using the `Apache 2.0 license`_
28(as found in the ``LICENSE`` file in the
29project's `GitHub repo`_).  There are some
30imported or reused components of the Zephyr project that use other licensing,
31as described in :ref:`Zephyr_Licensing`.
32
33.. _Apache 2.0 license:
34   https://github.com/zephyrproject-rtos/zephyr/blob/main/LICENSE
35
36.. _GitHub repo: https://github.com/zephyrproject-rtos/zephyr
37
38
39Distinguishing Features
40***********************
41
42Zephyr offers a large and ever growing number of features including:
43
44**Extensive suite of Kernel services**
45   Zephyr offers a number of familiar services for development:
46
47   * *Multi-threading Services* for cooperative, priority-based,
48     non-preemptive, and preemptive threads with optional round robin
49     time-slicing. Includes POSIX pthreads compatible API support.
50
51   * *Interrupt Services* for compile-time registration of interrupt handlers.
52
53   * *Memory Allocation Services* for dynamic allocation and freeing of
54     fixed-size or variable-size memory blocks.
55
56   * *Inter-thread Synchronization Services* for binary semaphores,
57     counting semaphores, and mutex semaphores.
58
59   * *Inter-thread Data Passing Services* for basic message queues, enhanced
60     message queues, and byte streams.
61
62   * *Power Management Services* such as tickless idle and an advanced idling
63     infrastructure.
64
65**Multiple Scheduling Algorithms**
66   Zephyr provides a comprehensive set of thread scheduling choices:
67
68   * Cooperative and Preemptive Scheduling
69   * Earliest Deadline First (EDF)
70   * Meta IRQ scheduling implementing "interrupt bottom half" or "tasklet"
71     behavior
72   * Timeslicing: Enables time slicing between preemptible threads of equal
73     priority
74   * Multiple queuing strategies:
75
76     * Simple linked-list ready queue
77     * Red/black tree ready queue
78     * Traditional multi-queue ready queue
79
80**Highly configurable / Modular for flexibility**
81   Allows an application to incorporate *only* the capabilities it needs as it
82   needs them, and to specify their quantity and size.
83
84**Cross Architecture**
85   Supports a wide variety of :ref:`supported boards<boards>` with different CPU
86   architectures and developer tools. Contributions have added support
87   for an increasing number of SoCs, platforms, and drivers.
88
89**Memory Protection**
90   Implements configurable architecture-specific stack-overflow protection,
91   kernel object and device driver permission tracking, and thread isolation
92   with thread-level memory protection on x86, ARC, and ARM architectures,
93   userspace, and memory domains.
94
95   For platforms without MMU/MPU and memory constrained devices, supports
96   combining application-specific code with a custom kernel to create a
97   monolithic image that gets loaded and executed on a system's hardware. Both
98   the application code and kernel code execute in a single shared address
99   space.
100
101**Compile-time resource definition**
102   Allows system resources to be defined at compile-time, which reduces code
103   size and increases performance for resource-limited systems.
104
105**Optimized Device Driver Model**
106   Provides a consistent device model for configuring the drivers that are part
107   of the platform/system and a consistent model for initializing all the
108   drivers configured into the system and Allows the reuse of drivers across
109   platforms that have common devices/IP blocks
110
111**Devicetree Support**
112   Use of :ref:`devicetree <dt-guide>` to describe hardware.
113   Information from devicetree is used to create the application image.
114
115**Native Networking Stack supporting multiple protocols**
116   Networking support is fully featured and optimized, including LwM2M and BSD
117   sockets compatible support.  OpenThread support (on Nordic chipsets) is also
118   provided - a mesh network designed to securely and reliably connect hundreds
119   of products around the home.
120
121**Bluetooth Low Energy 5.0 support**
122   Bluetooth 5.0 compliant (ESR10) and Bluetooth Low Energy Controller support
123   (LE Link Layer). Includes Bluetooth mesh and a Bluetooth qualification-ready
124   Bluetooth controller.
125
126   * Generic Access Profile (GAP) with all possible LE roles.
127   * GATT (Generic Attribute Profile)
128   * Pairing support, including the Secure Connections feature from Bluetooth
129     4.2
130   * Clean HCI driver abstraction
131   * Raw HCI interface to run Zephyr as a Controller instead of a full Host
132     stack
133   * Verified with multiple popular controllers
134   * Highly configurable
135
136   Mesh Support:
137
138   * Relay, Friend Node, Low-Power Node (LPN) and GATT Proxy features
139   * Both Provisioning bearers supported (PB-ADV & PB-GATT)
140   * Highly configurable, fitting in devices with at least 16k RAM
141
142**Native Linux, macOS, and Windows Development**
143   A command-line CMake build environment runs on popular developer OS
144   systems. A native POSIX port, lets you build and run Zephyr as a native
145   application on Linux and other OSes, aiding development and testing.
146
147**Virtual File System Interface with LittleFS and FATFS Support**
148   LittleFS and FATFS Support,
149   FCB (Flash Circular Buffer) for memory constrained applications, and
150   file system enhancements for logging and configuration.
151
152**Powerful multi-backend logging Framework**
153   Support for log filtering, object dumping, panic mode, multiple backends
154   (memory, networking, filesystem, console, ..) and integration with the shell
155   subsystem.
156
157**User friendly and full-featured Shell interface**
158   A multi-instance shell subsystem with user-friendly features such as
159   autocompletion, wildcards, coloring, metakeys (arrows, backspace, ctrl+u,
160   etc.) and history. Support for static commands and dynamic sub-commands.
161
162**Settings on non-volatile storage**
163   The settings subsystem gives modules a way to store persistent per-device
164   configuration and runtime state.  Settings items are stored as key-value pair
165   strings.
166
167**Non-volatile storage (NVS)**
168  NVS allows storage of binary blobs, strings, integers, longs, and any
169  combination of these.
170
171**Native POSIX port**
172  Supports running Zephyr as a Linux application with support for various
173  subsystems and networking.
174
175
176.. include:: ../../README.rst
177   :start-after: start_include_here
178
179
180Fundamental Terms and Concepts
181******************************
182
183See :ref:`glossary`
184