onsdag 21 februari 2007

Open source?

Open source hit, open source dit, bla bla bla…
(Ursprungligen october 22nd, 2006)

Det är mycket snack om open source. Folk säger att det är instabilt, osupportat och jävligt, eller så säger de att open source är Jesus reikarnerad. Så hur är det egentligen? Här är mitt försök att nyansera debatten.

Open source är varken bättre eller sämre än proprietär programvara per se. Det finns extremt dålig och helt fantastisk programvara av bägge varianterna. De bägge sätten att utveckla program har både goda och dåliga egenskaper.

Om vi börjar med att ta en titt på problematiken med att utveckla ett program:
Vi som användare vill ha features, egenskaper och finesser som ger programvaran en sk wow-faktor. Det kan vara ett smidigt sätt att utföra arbete som minskar antalet moment för användaren. Det kan vara ett snyggt interface. Det kan vara att programmet kan samverka med andra program. Eftersom vi användare har manual-afasi så måste funktionerna kunna förstås och användas utan att man behöver öppna någon som helst dokumentation.

Vi som användare vill också ha stabilitet, att programmet alltid gör rätt och att det aldrig kraschar. Programmet skall kunna fungera på alla möjliga och löjliga datorer, på alla operativsystem (framförallt alla versioner av Windows och Linux).

Vad är skillnaden mellan open source och proprietär programvara?

Proprietär betyder att programmet har en ägare. Ägaren bestämmer bl a hur programmet distribueras, hur det får användas, och hur ofta det skall komma en ny version. Proprietär programvara kan vara helt gratis, freeware, eller kosta tusentals eller hundratusentals kronor. Proprietär programvara har som regel sluten kod, där du bara får tillgång till körbara filer och inte till den underliggande programkoden (källkoden), därav begreppet “sluten kod”. För att förändra hur programmet arbetar krävs tillgång till källkoden.

Open source innebär att källkoden är tillgänglig för vem som helst. Open source innebär därmed en viss frihet. Man brukar säga att det ger användaren fyra friheter:

Friheten att använda programmet i vilket syfte som helst
Friheten att studera hur programvaran fungerar (du får tillgång till källkoden)
Friheten att distribuera programvaran till vem som helst
Friheten att förändra/förbättra programvaran
Men detta är inte bara friheter utan också i vissa fall krav. I GPL, general public license som är en av de många open source-licenserna, är du t ex tvungen att göra din källkod tillgänglig om du förändrat programvaran och distribuerar den vidare till grannen. Säg t ex att du laddat hem källkoden till en programvara och förändrat den. Om du nu säljer eller ger bort programvaran till grannen så måste du göra dina förändringar av källkoden tillgängliga för grannen så att han i sin tur kan förändra/förbättra programvaran.

Dubbel licensmodell

Det förekommer att programmakare släpper sin programvara under en så kallad dubbel licens.

Exempel på detta är MySQL som är en databashanterare. Du kan ladda hem programmet och använda det helt gratis, du kan till och med ta hem källkoden. Om du modifierar källkoden till MySQL (Open source-varianten) måste du dock göra dina förändringar tillgängliga i källkod till den som tar hem programmet från dig.

Om du köper MySQL som proprietär kod kan du fortfarande få tillgång till källkoden, men du behöver dock inte vidaredistribuera din förändrade källkod till den som får din version av MySQL.

Hur utvecklas programvara?

Ett av de största problemen är just att det är svårt att kombinera wow-faktor med stabilitet. Ju fler features, ju fler saker som kan gå fel. Under många år har den så kallade vattenfallsmodellen använts för utveckling av programvara. I vattenfallsmodellen går programmet igenom ett antal faser.

Kravanalys och specifikation. Här defineras vad programmet måste klara av.
Design. Här defineras hur programmet skall fungera.
Implementation. Här skrivs det mesta av programkoden.
Test och installation. Detta är stabiliseringsfasen där programmet skall göras så skottsäkert som möjligt.
Drift och underhåll. Här tar man fram patchar, servicepackar och liknande för att laga de fel som inte hittades under stabiliseringsfasen.
Under fas fem går de flesta utvecklarna över i nästa version av programmet som då troligtvis befinner sig i fas två.

Vattenfallsmodellen kan fungera ganska bra för proprietär programvara men den är svår att använda för utveckling av open source. Själva tanken är ju att vem som helst skall kunna bidra med kod till programvaran, att programvaran ständigt befinner sig i implementationsfasen.

Inom open source används ofta filosofin att man skall släppa små uppgraderingar ofta (version 1.33, version 1.34 osv, snarare än version 2) och att man förklarar sig i version 2 först när man gjort fundamentala förändringar jämfört med version 1. Snarare än att släppa servicepackar så släpper man ny version. Detta är ett sätt att arbeta som passar ett distribuerat team av utvecklare. Utvecklaren kan självständigt jobba på att utveckla en ny funktion, eller förbättra en befintlig funktion och publicerar sin kod till resten av teamet när utvecklaren anser att koden är stabil och funktionell.

I de fall då flera utvecklare arbetar på samma funktion krävs att varje utvecklare publicerar in sina förändringar varje dag. Programmet i sig är då i ständig förändring. För att programmet skall vara användbart så sorteras därför versionerna i två kategorier. Den stabila kategorin (Stable branch) och “under utvecklings kategorin” (Development branch eller Unstable branch). När en viss funktion är klar och stabil flyttas koden in i Stable branch som då ökar i versionsnummer.

Man uppfattar ofta att open source-projekt utvecklas snabbare än de proprietära motsvarigheterna. Dessutom kan du ju, om du själv är utvecklare eller har tillgång till den sortens kompetens, anpassa och vidareutveckla programmet för eget bruk. Genom distributionslicensen GPL, General Public License, har du fått den friheten.

Dokumentation då?

De flesta utvecklare skulle nog hålla med om att skriva dokumentation av hur man gör med ett program är den svåraste och tveklöst tråkigaste uppgiften i ett utvecklingsprojekt. Inom open source är dokumentationen ofta bristfällig, och man motiverar detta med att programkoden är tillgänglig och att du själv kan titta på koden och lura ut hur programmet fungerar. “Av utvecklare, för utvecklare” skulle man kunna säga. Problemet är ju att de flesta av oss inte är utvecklare.

Inom ett proprietärt projekt eller ett stort kommersiellt open source-projekt kan man ju anställa någon eller några som har som uppgift att just skriva dokumentationen, medan det inom små open source-projekt ofta bygger på frivillighet.

Så vilken modell är bäst, proprietärt eller open source?

Man kan egentligen inte utnämna någon modell som bättre eller sämre rent generellt. Man får helt enkelt fundera på vad som passar just dig bäst. Men blotta existensen av två konkurrerande modeller kan aldrig vara en dålig sak.

Inga kommentarer: