ftl README

The project's README from github.com/nuta/ftl. As one markdown file: README.md.

FTL

FTL is a new operating system aiming to be an alternative OS in cloud environments to Linux/BSDs/Illumos.

    Container #1 (Linux compat)      Container #2 (custom OS)
┌────────────────────────────────┐     ┌─────────────────┐
│  VM space       VM space       │     │ VmSpace         │
│ ┏━━━━━━━━━━━━┓  ┏━━━━━━━━━━━━┓ │     │ ┏━━━━━━━━━━━━━┓ │
│ ┃            ┃  ┃            ┃ │     │ ┃             ┃ │
│ ┃   Linux    ┃  ┃   Linux    ┃ │     │ ┃ FTL native  ┃ │
│ ┃  Process   ┃  ┃  Process   ┃ │     │ ┃  unikernel  ┃ │
│ ┃            ┃  ┃            ┃ │     │ ┃             ┃ │
│ ┃ ╌╌╌╌╌╌╌╌ Linux ABI ╌╌╌╌╌╌╌╌┃ │     │ ┃╌╌╌╌╌╌╌╌╌╌╌╌╌┃ │
│ ┃   Linux compat library     ┃ │     │ ┃  Your own   ┃ │
│ ┃  (Process, VFS, TCP, ...)  ┃◀┄┄┐   │ ┃  custom OS  ┃ │
│ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ ┆   │ ┗━━━━━━━━━━━━━┛ │
└────────────────────────────────┘ ┆   └─────────────────┘
   ┆  Minimalistic system calls    ┆
   ▼                               ┆ user faults (syscalls)
╔════════════════════════════════════════════════════════╗
║                       Small kernel                     ║
║         (memory, vCPU, network multiplexing, ...)      ║
╚════════════════════════════════════════════════════════╝

Running locally

Install Rust toolchain, LLVM tools, and QEMU:

brew install rustup qemu        # macOS
apt  install rustup qemu-system # Ubuntu

Build and run:

./run.sh

You can start a specific Linux command:

./run.sh "/bin/echo Hello World"

To get an ISO image to run FTL on cloud:

ISO=1 ./build.sh

[!TIP]

Fun fact: ftl-os.org is served by FTL running on Google Compute Engine.

Design

Per-container userspace OS

Most of OS features such as the concept of Linux process is implemented in a userspace library, which we call "userspace OS". This design is similar to Exokernel where the traditional monolithic kernel features are moved to a userspace library (library OS).

FTL kernel provides hypervisor-like primitives: vCPU (thread), virtual address space (vmspace), virtual network, for example. The kernel does not interpret Linux system calls, and redirects them to the userspace OS's handler.

Each container instance has its own isolated userspace OS. This lets you run Linux containers on their own isolated Linux-like application kernels, similar to gVisor.

You can upgrade, add your own features, inject printfs for debugging, or optimize the userspace OS by simply starting a new container, without kernel programming or rebooting the machine.

Hypervisor-shaped kernel interface

FTL enables you to build your own OS best suited for your application. For example, the concept of Linux process is implemented in a userspace library, not in the kernel. VFS and TCP are also implemented in a library. This means the FTL kernel is more like a hypervisor, which multiplexes hardware resources and provides minimalistic interface like virtio.

FTL kernel interface is heavily inspired by hypervisors to narrow the attack surface, and to make userspace OS flexible. The difference from hypervisors is FTL uses the user mode to catch exceptions (not hardware-accelerated virtualization).

Linux compatibility layer

FTL is designed to support multiple personalities. The tier 1 personality is Linux which runs Linux executables without any modifications.

Foreign binary support (aka. ABI emulation) is a well-established technique that can be seen in modern operating systems, such as Windows Subsystem for Linux (WSL 1), FreeBSD's Linuxulator, and OSv, to name a few.

The key difference in FTL is that it is implemented as a userspace library, not as a in-kernel feature separate supervisor process. Each FTL container has its own isolated Linux-like application kernel.

We also aim to add our own personality to offer FTL's own system calls and features not available in Linux. That is, Linux ABI is just one of OS interfaces available on FTL.

Interceptors (planned)

Interceptor is a planned feature to control the behavior of OS components at runtime, just like middlewares in web frameworks. Rate limiting, security auditing, network packet routing, and live patching will be implemented as interceptors.

Batteries included

FTL will be more similar to BSD than Linux. We plan to provide FTL as an operating system bundled with userspace software integrated nicely.

License

FTL is dual-licensed under the MIT and Apache 2.0 licenses.

ftl (nuta/ftl)

Searching Database…

304 ·GitHub
Что это?FTL — новая операционная система на Rust, которая стремится стать альтернативой Linux, BSD и Illumos специально для облачных сред.
FTL — монолитное ядро, как Linux, или нечто иное?Нет, ядро FTL само по себе маленькое и по устройству ближе к гипервизору: оно открывает минимальные примитивы вроде vCPU и виртуальных адресных пространств; настоящие функции ОС, такие как системные вызовы Linux и TCP, живут в userspace-библиотеке под названием «userspace OS», похоже на дизайн Exokernel.
Как запустить FTL локально?Установите тулчейн Rust, инструменты LLVM и QEMU, затем соберите и запустите проект; также можно запустить конкретную команду Linux или собрать ISO-образ, чтобы запустить FTL у облачного провайдера.
Что должно быть установлено перед сборкой FTL?Нужны тулчейн Rust, инструменты LLVM и QEMU для локальной эмуляции.
Может ли FTL уже сейчас запускать немодифицированные Linux-бинарники?FTL нацелен на слой совместимости с Linux-бинарниками, чтобы немодифицированные исполняемые файлы Linux работали через эмуляцию ABI в userspace, но некоторые запланированные функции, вроде «Interceptors» для управления поведением в рантайме, ещё не реализованы.
FTL предназначен только для больших облачных серверов или может работать и на небольших устройствах?Он нацелен прежде всего на облачные среды, но проект также удерживает свой след достаточно малым, чтобы работать на устройствах с ограниченными ресурсами.
Что именно представляет собой «userspace OS» в FTL?Это userspace-библиотека, реализующая большинство традиционных функций ОС (модель процессов Linux, VFS, TCP) отдельно для каждого контейнера, так что каждый контейнер запускает собственное изолированное, обновляемое патчами прикладное ядро, не трогая реальное ядро.
Чем это отличается от простого использования gVisor или unikernel?Как в gVisor, каждый контейнер получает изолированное userspace-ядро, обрабатывающее системные вызовы Linux, но, как в unikernel, вы можете сами патчить или расширять эту userspace OS без программирования ядра и перезагрузки машины.
FTL реально где-то работает в продакшене?Да, собственный сайт проекта ftl-os.org обслуживается FTL, вживую работающим на Google Compute Engine, в качестве демо в реальных условиях.
Что проект имеет в виду под «batteries included»?План — со временем поставлять FTL как полноценную операционную систему с комплектом интегрированного userspace-софта, что ближе к философии BSD, чем к подходу Linux с минимальным ядром.
Creator
nuta
Size
1.6 MB
Stars
304
Age
8mo
Commits · 90 Days