• KernelScript 0.1: nytt språk vill göra eBPF enklare för Linuxutvecklare

    KernelScript 0.1 är ett nytt experimentellt programmeringsspråk som vill göra avancerad Linuxutveckling enklare. Genom att samla eBPF-program, användarprogram och kernelintegration i en och samma kodbas kan utvecklare slippa mycket av den manuella C-kod och libbpf-hantering som annars krävs. Resultatet är ett lovande, men ännu omoget, verktyg för den som vill arbeta närmare Linuxkärnan utan att fastna i all teknisk kringkod.

    Att skriva program som kör nära Linuxkärnan är kraftfullt – men också svårt. Med eBPF kan utvecklare skapa små program som körs i kernelmiljö utan att själva Linuxkärnan behöver byggas om. Tekniken används redan i dag för allt från nätverksfiltrering och prestandamätning till säkerhet, felsökning och övervakning av system.

    Nu har den första publika versionen av KernelScript 0.1 släppts. Det är ett nytt öppet programmeringsspråk som vill göra utveckling med eBPF mer lättillgänglig, säkrare och mindre beroende av stora mängder handskriven stödkod.

    Ett språk för flera världar

    Traditionellt kräver eBPF-utveckling ofta att man skriver flera olika delar separat. Själva eBPF-programmet skrivs ofta i C. Sedan behövs kod i användarrymden för att ladda programmet, hantera kartor, läsa data och kommunicera med kärnan. I vissa fall krävs även integration med kernelmoduler och särskilda byggfiler.

    KernelScript försöker samla detta i en enda källkod. Utvecklaren skriver programmet i KernelScripts eget språk, och verktyget genererar därefter den C-kod, de användarprogram, Makefiles och integrationsdelar som behövs.

    Tanken är alltså inte att ersätta Linuxkärnan eller eBPF, utan att lägga ett högre och mer lättanvänt lager ovanpå.

    Varför eBPF är kraftfullt – men svårt

    eBPF har blivit en av de mest intressanta teknikerna i moderna Linuxsystem. Den gör det möjligt att köra små verifierade program i kärnan, till exempel för att analysera nätverkspaket, mäta systemanrop eller samla in prestandadata.

    Men tekniken har en hög tröskel. Den som skriver eBPF-program måste förstå hur Linux verifierar programmen innan de får köras, vilka hjälpfunktioner som är tillåtna, hur minne får användas och hur eBPF-kartor fungerar. Dessutom krävs ofta kunskap om libbpf och hur användarrymd och kernelkod samverkar.

    KernelScript försöker minska den komplexiteten genom att erbjuda ett mer specialiserat språk, anpassat just för eBPF-flöden.

    Stöd för vanliga eBPF-program

    I den första versionen finns stöd för flera viktiga typer av eBPF-program. Det omfattar bland annat XDP, som används för snabb paketbehandling mycket tidigt i nätverksstacken, och TC, som används för trafikstyrning.

    Språket har också stöd för olika typer av probes, alltså program som kan kopplas till funktioner i kärnan för spårning och felsökning. Dessutom finns stöd för perf event-program, som används vid prestandamätning.

    Det gör KernelScript intressant för utvecklare som arbetar med nätverk, observability, felsökning, säkerhet eller låg nivå-prestanda i Linuxmiljöer.

    eBPF-kartor som vanliga variabler

    En central del av eBPF är så kallade maps, eller kartor. De fungerar som datastrukturer där eBPF-program kan spara och dela information. De kan exempelvis användas för räknare, statistik, tillståndstabeller eller kommunikation mellan kernelprogram och användarprogram.

    KernelScript gör dessa kartor till en del av språket. Det finns stöd för bland annat hash maps, per-CPU arrays, LRU maps och pinned maps. Genom att behandla dem som språkvariabler slipper utvecklaren en del av den vanliga libbpf-koden som annars krävs.

    Det kan göra enklare eBPF-projekt både kortare och lättare att förstå.

    Avancerade funktioner redan från början

    Trots att KernelScript 0.1 är en tidig version innehåller den stöd för flera avancerade eBPF-funktioner. Bland annat nämns automatisk hantering av tail calls, enklare dynptr-hantering, kontroll av programlivscykel, struct_ops och inbyggd integration med kfuncs.

    För den som redan arbetar med avancerad eBPF-utveckling kan detta vara särskilt intressant. Det visar att KernelScript inte bara är tänkt som ett pedagogiskt förenklingslager, utan som ett försök att bygga ett mer komplett utvecklingsverktyg för Linuxnära programmering.

    Inte redo för produktion

    Samtidigt är det viktigt att betona att KernelScript fortfarande är experimentellt. Projektet beskrivs som beta, och utvecklarna varnar för att syntax, API:er och funktioner kan ändras utan bakåtkompatibilitet.

    Det betyder att KernelScript i nuläget främst bör ses som något för testning, utvärdering och experiment. För produktionssystem är det fortfarande säkrare att använda etablerade verktyg och arbetsflöden kring eBPF, C och libbpf.

    Ett tecken på vart Linuxutveckling är på väg

    KernelScript 0.1 visar ändå en tydlig trend. eBPF har blivit så viktigt att det nu växer fram nya språk och verktyg som försöker göra tekniken mer tillgänglig. På samma sätt som högnivåspråk en gång gjorde vanlig systemutveckling enklare, försöker KernelScript göra kernel-nära programmering mer strukturerad och mindre felbenägen.

    Om projektet lyckas återstår att se. Men idén är intressant: ett enda språk som kan beskriva logiken för eBPF, användarrymd och kernelintegration på samma gång.

    För Linuxutvecklare som vill följa framtidens systemprogrammering är KernelScript därför ett projekt att hålla ögonen på – även om det än så länge hör hemma i labbmiljö snarare än i skarpa driftsystem.

    https://github.com/multikernel/kernelscript

    Teknisk faktaruta: KernelScript 0.1

    Typ: Experimentellt programmeringsspråk och DSL för Linuxutveckling.

    Fokus: eBPF, användarprogram och kernelintegration från en gemensam kodbas.

    Licens: Apache 2.0.

    Syfte: Att minska behovet av handskriven C-kod, libbpf-boilerplate, Makefiles och separat användarrymdskod vid eBPF-utveckling.

    Stöd: XDP, TC, probes, perf events, eBPF maps, tail calls, dynptr, struct_ops och kfunc-integration.

    Status: Beta/experimentell. Rekommenderas ännu inte för produktion.

Etikett: dynptr

  • KernelScript 0.1: nytt språk vill göra eBPF enklare för Linuxutvecklare

    KernelScript 0.1 är ett nytt experimentellt programmeringsspråk som vill göra avancerad Linuxutveckling enklare. Genom att samla eBPF-program, användarprogram och kernelintegration i en och samma kodbas kan utvecklare slippa mycket av den manuella C-kod och libbpf-hantering som annars krävs. Resultatet är ett lovande, men ännu omoget, verktyg för den som vill arbeta närmare Linuxkärnan utan att…