Linus torvalds stejně jako mnoho vývojářů Jádro a různé distribuce vyjádřili svou zálibu v Rustovi a dokonce i při více než jedné příležitosti byla představena otázka implementace ovladačů v tomto programovacím jazyce na linuxovém jádře.
A k tomu již byla vydána různá díla, z nichž jsme již zmínili zde na blogu a můžeme zmínit například zážitek úspěšné z alternativní sady nástrojů, coreutils, přepsaných v Rustu (To zahrnuje nástroje jako sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln a ls).
Vzhledem k tomu se Linus torvalds plně nevyjádřil ve prospěch této iniciativy a vyjádřil negativní body (viz podrobnosti Na následujícím odkazu.)
Navzdory ostré kritice Linuse, práce o implementaci Rez v jádře nepřestal jít dál a nedávno byla představena první verze knihovny Aya, který vám umožňuje vytvářet ovladače eBPF v Rustu, které běží uvnitř jádra Linuxu ve speciálním virtuálním stroji JIT.
Na rozdíl od jiných vývojových nástrojů EBPF Aya nepoužívá libbpf a kompilátor BCCAle nabízí vlastní implementaci napsanou v Rustu který používá balíček šuplíků libc pro přímý přístup k systémovým voláním jádra. Budování Aya nevyžaduje nástroje jazyka C ani záhlaví jádra.
Pro koho to je nevědí o eBPF, měli by vědět, že se jedná o interpret bytového kódu zabudované do linuxového jádra, které umožňuje vytvářet obslužné rutiny síťových operací, sledovat provoz systému, zachytávat volání systému, řídit přístup, zpracovávat události s načasováním, počítat frekvenci a čas operací a sledovat pomocí kprobes / uprobes / tracepoints
Díky kompilaci JIT se bytecode překládá do strojových instrukcí za běhu a běží s výkonem nativního kódu. XDP poskytuje prostředky ke spouštění programů BPF na úrovni síťových ovladačů s přímým přístupem k vyrovnávací paměti paketů DMA, což vám umožňuje vytvářet vysoce výkonné ovladače pro vysoké zatížení sítě.
O společnosti Aya
Ze zmíněných klíčových funkcí od Ayy to můžeme najít má podporu pro BTF (Formát typu BPF), který poskytuje informace o typu v pseudokódu BPF ke kontrole a porovnání typů poskytovaných aktuálním jádrem. Použití BTF umožňuje vytvářet univerzální ovladače eBPF, které lze použít, aniž byste je museli překompilovat s různými verzemi linuxového jádra.
Stejně jako podpora volání bpf-to-bpf, globální proměnné a inicializátory, který umožňuje navrhovat programy pro eBPF analogicky s běžnými programy používajícími aya jako čas provedení, přičemž ruší funkce s přihlédnutím k práci v eBPF.
Na druhou stranu má také podpora interních typů jádra, včetně pravidelných polí, hash map, zásobníků, front, trasování zásobníků a struktur pro zásuvky a sledování výkonu.
Také má schopnost vytvářet různé typy eBTF programů, včetně programů pro filtrování a správu provozu, cgroup a různých ovladačů soketů, programů XDP a také podpory platformy pro neblokující asynchronní zpracování tokijského režimu a async-std.
Rychlá kompilace bez vazby na kompilaci jádra nebo záhlaví jádra.
Je důležité to zmínit projekt je stále považován za experimentální, protože API ještě není stabilizováno a nadále se vyvíjí. Také ještě nebyly implementovány všechny koncipované funkce.
Do konce roku vývojáři doufají, že funkčnost Aya srovnají s libbpf a v lednu 2022 tvoří první stabilní verzi. Rovněž se plánuje kombinace Aya částí potřebných k napsání Rust kódu pro linuxové jádro s komponentami uživatelského prostoru použitými k načtení, připojení a interakci s programy eBPF.
Konečně pokud máte zájem dozvědět se více o tom můžete zkontrolujte podrobnosti v následujícím odkazu.