# Introduction

The Zephyr OS is a small-footprint kernel designed for use on
resource-constrained and embedded systems: from simple embedded
environmental sensors and LED wearables to sophisticated embedded
controllers, smart watches, and IoT wireless applications.

See the [zephyrproject.org](https://zephyrproject.org) site for more
information about the project and becoming a member, and this [summary
of Zephyr resources](https://docs.zephyrproject.org/latest/introduction/index.html#resources)
to help you find your way around the project.

## Supported Boards

The Zephyr kernel supports multiple architectures, including ARM
Cortex-M, Intel x86, ARC, NIOS II, Tensilica Xtensa, and RISC-V 32.  For
details, see the [latest supported boards
documentation](https://docs.zephyrproject.org/latest/boards/index.html).

## Licensing

Zephyr is permissively licensed using the Apache 2.0 license (as found
in the [project's GitHub LICENSE
file](https://github.com/zephyrproject-rtos/zephyr/blob/main/LICENSE).
There are some imported or reused components of the Zephyr project that
use other licensing, as described in [Licensing of Zephyr Project
components](https://docs.zephyrproject.org/latest/LICENSING.html#zephyr-licensing).
