I går snakket vi om Radicle, et slags distribuert GitHub. I dag skal vi også se på et slags alternativ til Github, men da i form av et helt annet versjonskontrollsystem.

Fossil er versjonskontrollsystemet som brukes av SQLite. Det føles forsåvidt litt feil å kalle det et versjonskontrollsystem, for inne i et Fossil-prosjekt finner du også en wiki, oppgaveliste, forum, chat og objekt-lagring. For å gjøre det ekstra interessant er Fossil implementert på toppen av SQLite, så hele prosjektet ditt lagres i en enkelt fil som du kan kjøre SQL spørringer mot.

Selve Fossil-programmet får du også som en binærfil uten dynamiske avhengigheter. Det betyr at du i praksis kan legge Fossil og prosjektet ditt på en minnepinne som du bærer med deg. Dette gjør det også veldig enkelt å sette opp Fossil på en server, selv uten docker.

Noe helt annet enn Git

Fossil på kommandolinja

Som Git er Fossil en form for distribuert versjonskontroll. Likhetene stopper imidlertid der. Fossil ble skreddersydd for å bli brukt i SQLite-prosjektet, som utvikles av en liten gruppe utviklere som kjenner hverandre godt. Dette står i sterk kontrast til Git, som ble skreddersydd for utviklingen av Linux hvor utviklerne er mange og kjenner hverandre dårlig (om i det hele tatt).

Fossil har for eksempel ikke noe eget system for å holde oversikt over, gå gjennom eller godta endringer fra utenfor prosjektet. Enten er du en utvikler med skriverettigheter eller så er du det ikke. Det er riktignok mulig å sende og påføre endringer via såkalte bundles, men hvordan disse bundlene sendes og oppdateres finnes det ikke noe system for.

Filosofien rundt endringshistorikk er også annerledes. I Fossil vil historien reflektere hva som faktisk skjedde, og ikke hva utvikleren ønsker at historien skal vise. Du har for eksempel ikke mulighet til å skrive om historien, splitte opp eller slå sammen endringer. Når du oppretter grener er disse også permanente, selv om du lukker dem så vil de alltid vises i historikken. For å gjøre det ekstra spennende så vil alle endringer synkroniseres ved første mulighet. Her er det bare akseptere at alle feil du gjør blir nøye dokumentert.

Fordelene med denne modellen er at den er enkel. Det finnes få konsepter å lære og få måter å gjøre ting på, som igjen betyr at det finnes færre potensielle feil du kan gjøre. Dette gir et enklere grensesnitt og, siden alle endringer synkroniseres øyeblikkelig, reduserer hvor ofte du må interagere med versjonskontrollsystemet.

Så er det jo også mye mer enn bare versjonering av kode

Fossil har en innebygd web-server

Som nevnt tidligere har Fossil mye å by på. Hvert prosjekt får objekt-lagring (slik at brukere kan laste ned siste versjon av programmet ditt), et forum, chat i sanntid, en oppgaveliste og wiki. Fossil kan også fungere som en slags hjemmeside for prosjektet ditt, og gir deg gode muligheter til å skreddersy landingssiden gjennom HTML og CSS.

Isolert sett vil ingen av disse tilleggssystemene vinne priser for god design eller banebrytende funksjonalitet, men som en integrert pakke er det likevel mye å like her.

Selv uten nett kan du versjonere kode, svare på spørsmål i forumet, kommentere på oppgaver og redigere sider i prosjekt-wikien. Endringene synkes så når du kommer på nett igjen.

Det er også fint å kunne linke på tvers av systemer. En wiki-side kan lenke til en oppgave som lenker til en kodelinje i prosjektet.

Til slutt er det også verdt å nevne at Fossil gir deg mange tilpasningsmuligheter. I oppgavelisten er det f.eks. mulig å bestemme hvilke felter som skal registreres på en oppgave slik at du kan fjerne alt annet enn navn og beskrivelse, eller gå motsatt vei å legge til så mange kolonner at selv en Jira-koordinator ville blitt svimmel.

En portabel liten rakker

Med Fossil er hele prosjektet ditt en enkelt fil. Du kan legge denne i Dropbox, kopiere det til en minnepinne, laste det opp til en server, pælme den inn i S3 eller bruke SQLite-basert backup systemer som f.eks. LiteStream.

Som om ikke det er nok har også Fossil innebygd funksjonalitet for å importere endringer fra, og eksportere endringer til, et Git prosjekt. Det er med andre ord ganske lett å teste ut Fossil på et eksisterende prosjekt, om du er nysgjerrig, eller bruke Github som en slags backup løsning.

Vil Fossil ta over verden?

Fossil byr på mye mer enn versjonskontroll

Fossil er et veldig interessant system, men egner seg likevel best hvis man er i samme situasjon som utviklerne av SQLite. Det vil si et lite stabilt team med få prosjekter.

Å håndtere mer enn ett prosjekt om gangen er ikke noe Fossil takler godt. Hvert prosjekt må leve i sin egen fil, som betyr at brukere og alt av konfigurering må manuelt synkroniseres mellom dem. Siden Fossil heller ikke har noe tilsvarende Github Pull Request, så er det ikke lett å ta imot endringer fra eksterne brukere.

Men Fossil er likevel interessant for mindre teams eller individuelle utviklere som trenger mer enn det Git har å tilby, og som samtidig ikke har lyst til å selge sjela til Microsoft eller Atlassian.