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