• Frame – en helt ny X11-server skriven i assembler

    Samtidigt som stora delar av Linuxvärlden lämnar det gamla grafiksystemet X11 till förmån för Wayland väljer den norske utvecklaren Geir Isene att gå åt motsatt håll. Han har byggt en helt ny X11-server från grunden – skriven nästan uteslutande i assembler för x86-64-processorer.

    Projektet heter Frame och är ett tekniskt experiment som försöker besvara en ovanlig fråga: Hur liten och enkel kan en fungerande grafisk Linuxmiljö egentligen bli?

    Programmet som placerar bilden på skärmen

    För att förstå vad Frame gör behöver man först känna till vad en grafikserver är.

    När ett program som Firefox eller GIMP vill visa ett fönster på skärmen ritar programmet normalt inte direkt mot bildskärmen. I stället skickar det instruktioner till ett underliggande system som hanterar fönster, tangentbord, muspekare och bildskärmar.

    På traditionella Linuxdatorer har denna uppgift länge skötts av X.Org Server, den vanligaste implementationen av X11-systemet. X11 har sina rötter i 1980-talet och har under årtionden byggts ut för att fungera med många olika datorer, grafikkort och användningsområden.

    Resultatet är ett stort och komplicerat system med många historiska lager.

    Frame försöker i stället börja om från början.

    Byggd direkt ovanpå Linuxkärnan

    Frame bygger inte vidare på X.Org och använder inte heller vanliga programbibliotek som libc, Mesa, Xlib eller FreeType. I stället kommunicerar servern direkt med Linuxkärnan genom systemanrop.

    För att visa grafik använder Frame Linux gränssnitt DRM och KMS, vilka hanterar grafikkort och bildskärmslägen. Tangentbord och mus läses genom evdev, det normala gränssnittet för inmatningsenheter i Linux.

    Program som Firefox kommunicerar med Frame genom själva X11-protokollet.

    Man kan likna det vid att bygga en bil utan att köpa färdiga delar från en underleverantör. I stället tillverkar utvecklaren stora delar av motorn, elsystemet och instrumentpanelen själv och kopplar dem direkt till chassit.

    Resultatet är en statiskt länkad programfil utan vanliga beroenden till installerade bibliotek.

    Skriven i assembler

    De flesta moderna program skrivs i språk som C, C++, Rust eller Python. Frame är i stället skriven i assembler.

    Assembler ligger mycket nära processorns egna maskininstruktioner. Utvecklaren arbetar därför direkt med register, minnesadresser, instruktioner och systemanrop.

    Det ger stor kontroll över exakt vad datorn gör, men gör samtidigt utvecklingen betydligt mer komplicerad. Funktioner som vanliga programmeringsspråk och bibliotek erbjuder automatiskt måste ofta byggas manuellt.

    Frame består enligt utvecklaren av omkring 20 000 rader assemblerkod. Vid en senare genomgång låg källkoden närmare 25 000 rader. Det är fortfarande litet jämfört med etablerade grafiksystem, men antalet kodrader säger inte automatiskt något om stabilitet, säkerhet eller hur komplett programmet är.

    Kan redan köra Firefox och GIMP

    Frame är långt ifrån en fullständig implementation av X11, men servern stöder redan tillräckligt många delar av protokollet för att kunna köra riktiga skrivbordsprogram.

    Bland funktionerna finns stöd för att skapa och hantera fönster, läsa tangentbord och mus, hantera urklipp, bilder och egenskaper samt kommunicera med program genom X11-protokollet.

    Servern innehåller även stöd för flera vanliga X11-utökningar, exempelvis RANDR för bildskärmshantering, SHAPE för fönster med särskilda former och MIT-SHM för snabbare överföring av bilddata mellan program.

    Isene uppger att han använder Frame som sin dagliga grafikserver och att både Firefox och bildredigeringsprogrammet GIMP fungerar på systemet.

    Det betyder dock inte att alla X11-program fungerar. X11 är ett omfattande protokoll med många funktioner och tillägg som utvecklats under flera årtionden. Program kan därför använda funktioner som Frame ännu inte känner till.

    En hel skrivbordsmiljö i assembler

    Frame är nära kopplad till ett större projekt som heter CHasm, en förkortning av ”CHange to ASM”.

    CHasm består av flera små Linuxprogram som också är skrivna i x86-64-assembler. Där ingår bland annat:

    • Tile, en fönsterhanterare som placerar fönster sida vid sida.
    • Glass, en terminalemulator.
    • Bare, ett kommandoskal.
    • Strip, en statusrad.
    • Bolt, ett skärmlås och inloggningsverktyg.

    Tillsammans kan dessa program skapa en komplett, men mycket minimalistisk, grafisk Linuxsession. Projekten är fristående och utgör inte en traditionell skrivbordsmiljö som KDE Plasma eller GNOME.

    CHasm-verktygen kommunicerar direkt med Linuxkärnan eller med X11-protokollet och saknar dynamiska programberoenden. Enligt projektets dokumentation omfattar den körbara delen av hela sessionen mindre än 500 kilobyte, även om detta inte inkluderar Linuxkärnan, drivrutinerna eller de vanliga program som användaren startar.

    Ett skrivbord som försöker göra ingenting

    Ett av projektets viktigaste mål är att datorn ska vara helt stilla när användaren inte arbetar.

    Moderna skrivbordsmiljöer kan ha många processer som regelbundet vaknar för att kontrollera tiden, uppdatera animationer, läsa systeminformation eller kontrollera om något har förändrats. Varje sådan aktivitet använder lite processortid och kan i teorin påverka batteritiden.

    Frame och CHasm är i stället konstruerade för att vänta tills det faktiskt händer något, exempelvis att användaren rör musen eller att ett program skickar nya bilddata.

    Isene genomförde ett informellt test där Frame och X.Org hade ungefär samma totala strömförbrukning när datorn stod oanvänd. X.Org använde däremot enligt hans mätning nästan tre gånger så mycket processortid.

    Skillnaden i total strömförbrukning var liten eftersom bildskärmen, nätverket och andra delar av datorn använder betydligt mer energi än en vilande grafikserver. Mätningen är dessutom utförd av utvecklaren själv på en enda dator och ska därför inte betraktas som ett oberoende prestandatest.

    Artificiell intelligens har hjälpt till

    Projektet har utvecklats med omfattande hjälp av AI-verktyget Claude Code. Isene beskriver hur han förklarar problem och önskade funktioner för AI-systemet, som sedan hjälper till att skapa och ändra assemblerkoden.

    Det gör Frame intressant även ur ett annat perspektiv. Att skriva en X11-server i assembler är normalt ett mycket tidskrävande specialprojekt. Moderna AI-verktyg kan göra det möjligt för en ensam utvecklare att experimentera med systemprogrammering på en nivå som tidigare ofta krävde större grupper.

    Samtidigt innebär AI-genererad kod inte att programmet automatiskt är korrekt. En grafikserver hanterar minne, inmatning, andra program och hårdvara. Fel kan orsaka allt från grafikproblem och krascher till säkerhetsbrister.

    Frame behöver därför granskas, testas och underhållas på samma sätt som all annan systemnära programvara – kanske ännu mer noggrant eftersom assembler saknar många av de säkerhetsfunktioner som finns i modernare språk.

    Ingen ersättare för X.Org ännu

    Frame är för närvarande ett experimentellt projekt och inte ett praktiskt alternativ för vanliga Linuxanvändare.

    Servern fungerar endast på Linuxdatorer med x86-64-processor. Den saknar delar av X11-protokollet, har begränsat hårdvarustöd och använder huvudsakligen mjukvarurendering i stället för fullständig grafikacceleration.

    Det finns inte heller några etablerade installationspaket eller färdiga inloggningssessioner för stora Linuxdistributioner. Projektet är främst byggt för utvecklarens egen dator och hans eget arbetssätt.

    CHasm-dokumentationen säger uttryckligen att verktygen främst publiceras som inspiration. Tanken är inte nödvändigtvis att användare ska installera dem som de är, utan att intresserade utvecklare ska studera, ändra och anpassa koden efter sina egna behov.

    Ett experiment om kontroll och enkelhet

    Frame kommer sannolikt inte att ersätta X.Org eller konkurrera med Wayland inom den närmaste framtiden. Projektets verkliga betydelse ligger i stället i vad det demonstrerar.

    Det visar att det fortfarande är möjligt för en enskild utvecklare att bygga en fungerande grafikserver direkt ovanpå Linuxkärnan. Det visar också hur mycket av ett modernt datorsystem som egentligen består av valbara lager – bibliotek, ramverk och verktyg som är praktiska, men inte alltid absolut nödvändiga.

    Frame är därför mindre en färdig produkt och mer ett tekniskt laboratorium.

    Projektet ställer en fråga som ofta försvinner när programvaran växer: Hur mycket kod behöver vi egentligen för att öppna ett fönster, ta emot ett tangenttryck och placera några bildpunkter på skärmen?

    Geir Isenes svar är att det går att göra med betydligt mindre än vad dagens vanliga Linuxskrivbord använder – men också att enkelhet på ytan kan kräva mycket avancerat arbete under huven.

    https://github.com/isene/chasm

    $ teknisk_faktaruta –frame
    Projekt: Frame
    Typ: Experimentell X11-server
    Utvecklare: Geir Isene
    Plattform: Linux på x86-64
    Programmeringsspråk: x86-64-assembler
    Kodmängd: Cirka 20 000 rader assemblerkod
    Grafik: DRM/KMS och mjukvarurendering
    Inmatning: evdev för tangentbord och mus
    Kommunikation: X11:s trådprotokoll
    X11-utökningar: Bland annat RANDR, SHAPE, XInput2 och MIT-SHM
    Externa beroenden: Inga vanliga körberoenden som libc, Mesa, Xlib eller FreeType
    Testade program: Bland annat Firefox och GIMP
    Status: Experimentellt och ännu inte en fullständig ersättare för X.Org
    root@linux:~# Frame är användbart på utvecklarens dator, men saknar fortfarande fullständigt protokoll- och hårdvarustöd.

Etikett: mjukvarurendering

  • Frame – en helt ny X11-server skriven i assembler

    Samtidigt som stora delar av Linuxvärlden lämnar det gamla grafiksystemet X11 till förmån för Wayland väljer den norske utvecklaren Geir Isene att gå åt motsatt håll. Han har byggt en helt ny X11-server från grunden – skriven nästan uteslutande i assembler för x86-64-processorer. Projektet heter Frame och är ett tekniskt experiment som försöker besvara en…