Cap. 2. Începutul

Cuprins

Cum să începi cu ce există deja
Alegerea unui nume bun
Stabiliți o declarație a misiunii clară
Afirmați că proiectul este liber
Lista de posibilități și cerințe
Starea dezvoltării
Download-uri
Version Control and Bug Tracker Access
Communications Channels
Developer Guidelines
Documentation
Availability of documentation
Developer documentation
Example Output and Screenshots
Canned Hosting
Choosing a License and Applying It
The "Do Anything" Licenses
The GPL
How to Apply a License to Your Software
Setting the Tone
Avoid Private Discussions
Nip Rudeness in the Bud
Practice Conspicuous Code Review
When Opening a Formerly Closed Project, be Sensitive to the Magnitude of the Change
Announcing

Modelul clasic al inițierii unui proiect de software liber a fost creat de Eric Raymond, într-un articol acum faimos despre proiecte open-source intitulat Catedrala și bazarul. El scria:

Fiecare exemplu de software bun începe prin a scărpina o mâncărime a unui dezvoltator.

(din http://www.catb.org/~esr/writings/cathedral-bazaar/ )

Trebuie reținut faptul că Rayomnd nu a spus că proiectele open-source apar doar când un individ simte o nevoie. Mai degrabă spunea că aplicațiile bune rezultă atunci când programatorul are un interes personal în a-și vedea problema rezolvat; relevanța față de software-ul liber este că preocuparea personală reprezenta cea mai des întâlnită motivație pentru inițierea unui astfel de proiect.

Și în zilele noastre tot așa pornesc majoritatea proiectelor de software liber, dar mai puțin decât în 1997, când Raymond a scris aceste cuvinte. Astăzi, avem fenomenul organizațiilor—inclusiv corporații în căutare de profit—care inițiază proiecte mari, administrate centralizat, de la zero. Programatorul singuratic, care scrie niște cod pentru a rezolva o problemă și care, mai apoi, realizează că rezultatul are o aplicabilitate mai mare, este încă sursa multor proiecte de software liber dar aceasta nu mai este unica poveste.

Punctul de vedere al lui Raymond este, încă, pertinent. Condiția esențială este ca producătorii software-ului să aiba un interes direct în succesul acestuia, pentru că ei înșiși îl folosesc. Dacă aplicația nu face exact ceea ce ar trebui, persoana sau organizația care o produce va simți acest lucru în munca de zi cu zi. De exemplu, proiectul OpenAdapter (http://www.openadapter.org/), inițiat de bancherul Dresdner Kleinwort Wasserstein ca o platformă open-source pentru integrarea sistemelorde informații financiare disparate, nu se poate spune că adresează problema individuală a vreunui programator. El rezolvă o problemă instituțională. Dar problema aceasta apare direct din experiențele instituției și a partenerilor ei și de aceea, dacă proiectul nu reușește să ofere soluții, ei vor ști. Acest lucru produce software de calitate pentru că bucla de reglaj funcționează în direcția potrivită. Programul nu se scrie pentru a fi vândut altcuiva care să își rezolve problema. Este scris pentru a rezolva o problemă proprie și apoi distribuit altora, la fel ca și când problema ar fi o boală iar aplicația medicamentul a cărui distribuție vrea să elimine complet epidemia.

Capitolul acesta discută cum să prezinți o aplicație liberă nouă lumii dar multe dintre recomandările lui pot să pară cunoscute unei organizații de sănătate care distribuie medicamente. Scopurile sunt asemănătoare: Vrei să fie clar ce face medicamentul, să ajungă în mâinile oamenilor potriviți și să fii sigur că persoanele care îl vor primi știu cum să îl folosească. În cazul software-ului, vrei de asemenea să atragi unii dintre cei care îl primesc în activitatea de cercetare pentru a îmbunătăți medicamentul.

Distribuirea de software gratuit e o problemă cu două tăișuri. Aplicația trebuie să strângă utilizatori și dezvoltatori. Aceste două nevoi nu se află neapărat în conflict dar adaugă puțină complexitate modului de prezentare inițială a proiectului. O parte a informației e utilă pentru amândouă mediile, o altă parte doar pentru unul dintre ele. Amândouă tipurile de informație trebuie să subscrie principiului unei prezentări scalate; mai precis, gradul de detaliu prezentat în fiecare etapă trebuie să corespundă în mod direct timpului și efortului depus de cititor. Efortul mai mare trebuie să corespundă recompensei mai mari. Când cele două nu sunt corelate îndeaproape, oamenii își pierd repede credința și nu mai depun efort.

Corolarul este că aparențele contează. Programatorii, în special, nu vor să creadă acest lucru de multe ori. Dragostea lor de fond peste formă este aproape un punct de mândrie profesională. Nu e accidental faptul că atât de mulți programatori au o antipatie față de marketing și relații publice, nici că designerii profesioniști sunt, de multe ori, oripilați de ceea ce creează programatorii pe cont propriu.

E de regretat acest lucru pentru că există situații în care forma este și fond, iar prezentarea proiectului este una dintre ele. De exemplu, primul lucru pe care îl află un vizitator despre un proiect este cum arată site-ul web. Informația aceasta e absorbită înainte ca orice parte din conținutul site-ului să fie înțeles—înainte să se fi citit vreun text sau să se fi dat click pe un link. Oricât de nedrept ar putea să pară, oamenii nu se pot abține de la a-și forma o primă impresie imediat. Aspectul site-ului arată dacă s-a realizat prezentarea proiectului cu grijă. Majoritatea putem să ne dăm seama din prima dacă un site a fost creat în grabă sau a fost gândit cu atenție. Asta este prima informație pe care proiectul vostru o oferă și impresia pe care o creează se va transfera mai apoi restului proiectului prin asociație.

Astfel, în vreme ce o mare parte din acest capitol vorbește de conținutul cu care trebuie să înceapă proiectul vostru, trebuie să vă amintiți și că aspectul acestuia contează. Pentru că site-ul proiectului trebuie să funcționeze pentru două tipuri diferite de vizitatori—utilizatori și dezvoltatori—trebuie acordată multă atenție clarității și francheții. Deși nu este locul potrivit pentru un tratat general despre design-ul de pagini web, un principiu e destul de important pentru a merita să fie menționat, în special când site-ul servește mai multor audiențe (poate suprapuse): oamenii trebuie să aibă o idee despre unde îi va duce un link înainte de a da click pe el. De exemplu, trebuie să fie evident doar privind link-ul către documentația pentru utilizatori că el duce către documentația pentru utilizatori și nu către cea pentru dezvoltatori. Conducerea unui proiect înseamnă, pe de-o parte, furnizarea de informații dar și asigurarea comfortului. Simpla prezență a anumitor oferte standard, în locurile așteptate, dă asigurări utilizatorilor și dezvoltatorilor care se gândesc dacă să se implice. Spune faptul că acest proiect e bine organizat, a anticipat întrebările pe care oamenii le vor pune, și a făcut un efort pentru a răspunde la ele într-un mod care să necesite un efort minim din partea celui care întreabă. Emanând această aură de pregătire, proiectul trimite un mesaj: „Timpul vostru nu va fi irosit dacă vă implicați”, care e exact ceea ce vor oamenii să audă.

Dar, prima dată, privește în jur

Înainte de a începe un proiect open-source, trebuie făcut un lucru important:

Întotdeauna uitați-vă dacă nu există un proiect care să facă exact ceea ce vreți. Șansele sunt destul de mari ca, oricare ar fi problema pe care o vreți rezolvată acum, altcineva s-o fi rezolvat-o înainte. Dacă au rezolvat-o și au distribuit și codul cu o licență liberă, atunci nu există niciun motiv pentru a reinventa roata astăzi. Există, desigur, și excepții: dacă vreți să porniți un proiect ca pe o experiență educațională, codul pre-existent nu vă va ajuta; poate că proiectul la care vă gândiți e atât de specializat încât nu există nicio șansă ca oricine altcineva să o fi facut-o. Dar, în general, nu există nici un sens în a nu căuta și recompensa poate fi mare. Dacă motoarele normale de căutare pe Internet nu returnează nimic, încercați să căutați pe: http://freecode.com/ (un site de știri legate de proiecte open-source, despre care se va discuta mai mult mai încolo), pe http://www.sourceforge.net/ și în directorul de software liber al Fundației pentru Software Liber la adresa: http://directory.fsf.org/.

Chiar dacă nu găsești exact ceea ce cauți, s-ar putea să găsești ceva atât de apropiat încât să aibă sens să te alături proiectului și să adaugi funcționalitate decât să începi de la zero de unul singur.

Cum să începi cu ce există deja

Te-ai uitat în jur, ai văzut că nimic din ce există nu se potrivește nevoilor tale, și ai decis să inițiezi un proiect nou.

Ce faci acum?

Cea mai grea parte când lansezi un proiect de software liber e să transformi o viziune privată într-una publică. Tu sau organizația ta poti să știi foarte bine ceea ce vrei dar exprimarea acestui scop într-un mod comprehensibil lumii necesită un volum apreciabil de lucru. Cu toate acestea, e esențial să asiguri timpul necesar pentru a o face. Tu și ceilalți fondatori trebuie să decideți la ce se referă exact proiectul—adică să decideți care sunt limitările lui, ceea ce nu va face precum și ceea ce va putea face—și să scrieți o declarație a misiunii. Această parte nu e, de obicei, prea dificilă deși poate uneori să scoată la iveală presupuneri nerostite sau chiar neînțelegeri despre natura proiectului, ceea ce e un lucru bun: e mai bine să le rezolvați acum decât mai târziu. Următorul pas este de a pregăti proiectul pentru consumul public, etapă care este una extrem de grea.

Ceea ce face această parte atât de laborioasă este faptul că ea presupune organizarea și documentarea lucrurilor pe care toată lumea le știe deja—„toată lumea” înseamnă toți cei care au fost implicați în proiect până acum. Astfel, pentru oamenii care execută această muncă, nu există niciun beneficiu imediat. Ei nu au nevoie de un fișier README care să dea o descriere a proiectului și nici de un document de design sau manual de utilizator. Ei nu au nevoie de un arbore de cod bine ordonat, conform standardelor informale dar acceptate pe scară largă ale distribuției surselor software. Indiferent cum ar fi aranjat codul, pentru ei este în regulă pentru că deja cunosc structura și, dacă există un cod executabil, știu și cum să îl folosească. Nu contează, pentru ei, nici dacă presupunerile arhitecturale fundamentale ale proiectului rămân nedocumentate; ei deja sunt familiarizați și cu acestea.

Pe de altă parte, nou veniții au nevoie de aceste lucruri. Din fericire, ei nu au nevoie de toate odată. Nu e nevoie să se furnizeze toate resursele posibile înainte de a transforma proiectul în unul public. Într-o lume perfectă, poate, fiecare proiect open-source nou și-ar începe viața cu un document de design cuprinzător, un manual complet pentru utilizatori (cu marcaje speciale pentru opțiunile planificate dar încă neimplementate), cod bine și frumos împachetat, capabil să ruleze pe orice platformă de execuție, și așa mai departe. În realitate, rezolvarea tuturor acestor probleme ar fi un mare consumator de timp și, oricum, e o muncă pentru care dezvoltatorii se pot aștepta și la ajutor din partea din partea voluntarilor odată ce proiectul a început.

Ce este totuși necesar este să se investească destul în prezentare astfel încât nou-veniții să poată trece ușor peste obstacolul inițial al lipsei de familiaritate. Imaginați-vă că este primul pas dintr-un proces de bootstrapping, de a aduce proiectul la un fel de nivel minim de energie pentru activare. Am auzit oameni numind acest prag ca și energie de hacktivare: cantitatea de efort pe care un nou-venit trebuie să-l depună înainte de a primi ceva în schimbul timpului lui. Cu cât nivelul acestei energii e mai scăzut, cu atât mai bine. Prima etapă presupune aducerea acestui nivel suficient de jos încât oamenii să fie încurajați să se implice.

Fiecare dintre următoarele subsecțiuni descrie un aspect important al inițierii unui proiect. Ele sunt prezentate aproximativ în ordinea în care un vizitator nou le-ar întâlni deși ordinea în care ar fi implementate în realitate ar fi diferită. Puteți să le tratați ca o listă de verificări. Când porniți un proiect parcurgeți lista și asigurați-vă că fiecare aspect e tratat sau cel puțin că vă simțiți confortabil cu consecințele potențiale dacă ați omis una dintre ele.

Alegerea unui nume bun

Puneți-vă în pantofii cuiva care tocmai a auzit despre proiect, poate chiar în urma căutării unei aplicații care să rezolve o problemă. Primul lucru pe care îl vor observa va fi numele proiectului.

Un nume bun nu va aduce automat succesul proiectului la fel cum un nume rău nu-l va blestema—deși, în realitate, un nume foarte,rău ar putea face asta, vom porni de la presupunerea că niciunul dintre cititori nu vrea să-și facă proiectul să eșueze. Cu toate acestea, un nume rău poate încetini rata de adopție a proiectului, fie pentru că oamenii nu-l consideră serios, fie pentru că pur și simplu nu pot să-l rețină.

Un nume bun:

  • Dă o idee despre ceea ce face proiectului sau are măcar o legătură evidentă, astfel încât, dacă o persoană știe numele și ceea ce face proiectul, să poată regăsi rapid numele în memorie mai târziu.

  • E ușor de reținut. Nu se poate trece peste faptul că engleza este limba standard a Internet-ului. „ușor de memorat” înseamnă „ușor de memorat pentru o persoană care știe bine engleză”. Numele care sunt glume dependente de pronunția unui vorbitor nativ, de exemplu, vor fi opace pentru mulți vorbitori nenativi de engleză. Dacă gluma este foarte convingătoare și memorabilă, ar putea fi totuși folosită; țineți doar minte faptul că majoritatea oamenilor care văd numele nu și-l vor imagina în cap în același mod cum ar face-o un vorbitor nativ.

  • Nu este identic cu numele altui proiect și nu încalcă nicio marcă înregistrată. Aici nu e vorba doar de bune maniere ci și de aspectul legal. Nu vreți să aveți parte de o confuzie de identitate. E destul de greu să urmărești toate proiectele care sunt disponibile pe net fără a avea proiecte diferite care poartă același nume.

    Resursele menționate anterior la „Dar, prima dată, privește în jur” sunt utile pentru desoperirea faptului că alt proiect are deja numele la care vă gândiți. Căutări gratuite după mărci înregistrate se pot face la adresele http://www.nameprotect.org/ și http://www.uspto.gov/.

  • Dacă se poate, e disponibil ca un nume de domeniu în domeniile rădăcină de genul .com, .net și .org. Probabil că ar fi bine de ales unul .org, pentru a îl prezenta ca pagina oficială a proiectului; celelalte două ar trebui să redirecționeze acolo și ar trebui să existe doar pentru a preveni ca terțe părți să creeze confuzii de identitate în jurul numelui proiectului. Chiar dacă vreți să găzduiți proiectul la altă adresă (vezi „Canned Hosting”), puteți să înregistrați, totuși, domenii specifice proiectului și să le redirecționați către site-ul de găzduire. E mai ușor pentru utilizatori să țină minte un URL simplu.

Stabiliți o declarație a misiunii clară

După ce au găsit site-ul proiectului, următorul lucru pe care oamenii îl vor face este să caute o descriere rapidă, o declarație a misiunii, astfel încât să decidă (în termen de 30 de secunde) dacă sunt sau nu interesați să afle mai multe. Aceasta trebuie amplasată pe prima pagină în mod proeminent, de preferință chiar sub numele proiectului.

Declarația scopului trebuie să fie concretă, limitatoare și, mai presus de orice, scurtă. Acesta este un exemplu bun, de la http://www.openoffice.org/:

De a crea, ca și o comunitate, cea mai bună suită de produse pentru birou astfel încât aceasta să ruleze pe toate platformele principale și să furnizeze acces la toată funcționalitatea și toate datele prin API-uri bazate pe componente deschise și un format al fișierelor bazat pe XML.

În doar câteva cuvinte, au nimerit toate punctele importante, în special prin apelul la cunoștințele anterioare ale cititorului. Spunând: "ca și o comunitate", ei semnalizează faptul că nicio corporație nu va domina dezvoltarea; "internațional " înseamnă că aplicația va permite oamenilor să lucreze în mai multe limbi și cu mai multe setări locale; "toate platformele principale " înseamnă că aceasta va fi portabilă pe Unix, Macintosh și Windows. Restul sugerează faptul că interfețele deschise și formatele de fișiere ușor de înțeles sunt o parte importantă a țelului. Nu spun direct că vor să creeze o alternativă gratuită la Microsoft Office dar majoritatea oamenilor pot să citească printre rânduri. Deși această declarație pare largă la prima vedere, în realitate este destul de restrânsă: cuvintele "suită de produse pentru birou" au un înțeles foarte concret pentru cineva care este familiarizat cu astfel de aplicații. Din nou, se presupune experiența anterioară a cititorului (în acest caz, probabil din MS Office) pentru a face declarația misiunii concisă.

Natura declarației misiunii depinde parțial de cel care o scrie, nu doar de aplicația pe care o descrie. De exemplu, are sens pentru OpenOffice.org să folosească sintagma "ca și o comunitate ", pentru că proiectul a fost inițiat, și încă este sponsorizat în mare, de Sun Microsystems. Incluzând aceste cuvinte, Sun indică faptul că e conștientă de grijile că ar încerca să domine procesul de dezvoltare. În acest fel de probleme, simpla demonstrație de conștientizare a potențialului problemei ajută destul în evitarea problemei în întregimea ei. Pe de altă parte, proiectele care nu sunt sponsorizate de o corporație nu au nevoie de o astfel de sintagmă; dezvoltarea de către comunitate este lucrul normal așa că, în mod normal, nu ar fi niciun motiv pentru care să fie enumerat ca și parte a misiunii.

Afirmați că proiectul este liber

Cei care rămân interesați după ce au citit declarația scopului vor vrea să vadă mai multe detalii, poate documentația pentru utilizatori sau dezvoltatori, și, în cele din urmă, să downloadeze ceva. Dar înainte să se întâmple oricare dintre lucrurile acestea, vor dori să știe că sursele sunt deschise.

Prima pagină trebuie să explice clar și fără ambiguitate că proiectul este open-source. Poate părea evident acest lucru dar ați fi surprinși să aflați câte proiecte uită să facă asta. Am văzut site-uri de proiecte de software liber unde prima pagină nu numai că nu specifica sub care licență de software liber era distribuită dar nici măcar nu menționa faptul că proiectul e liber. Uneori cea mai importantă informație era retrogradată până la pagina de download, cea pentru dezvoltatori sau alt loc în care era nevoie de mai mult de un click de mouse pentru a ajunge. În cazuri extreme, licența nu apărea nicăieri pe site—singurul mod de a o găsi era de a downloada aplicația și de a căuta înăuntru.

Nu faceți această greșeală. O astfel de omisiune poate duce la pierderea unor potențiali dezvoltatori și utilizatori. Publicați pe prima pagină, chiar sub declarația scopului proiectului, că acesta este software liber sau open-source și menționați licența exactă. Un ghid scurt pentru alegerea licenței se găsește în „Choosing a License and Applying It” în continuarea acestui capitol, iar problemele legate de licențiere sunt discutate în detaliu în Cap. 9, Licenses, Copyrights, and Patents.

În acest moment, vizitatorul nostru ipotetic a determinat— probabil într-un minut sau mai puțin—că e interesat să petreacă, de exemplu, încă cinci minute pentru a investiga proiectul. Următoarele secțiuni descriu ce trebuie să descopere în acele cinci minute.

Lista de posibilități și cerințe

Ar trebui să existe o listă scurtă cu posibilitățile oferite de software (dacă una dintre ele nu e încă terminată, ea poate fi listată dar se pune "planificat" sau "în curs" lângă aceasta), și genul de sistem necesar pentru a rula software-ul. Gândiți-vă la lista de posibilități și cerințe la fel cum ați prezenta cuiva care vă cere un rezumat scurt al proiectului. De multe ori e doar o extindere logică a scopului declarat. De exemplu, declarația misiunii proiectului poate fi:

De a crea un motor de indexare și căutare text cu o interfață de programare bogată, pentru a fi folosită de programatori în furnizarea serviciilor de căutare în seturi mari de fișiere text.

Lista de posibilități și cerințe ar da detaliile, clarificând prezentarea scopului declarat:

Posibilități:

  • Caută în text simplu, HTML și XML

  • Căutare după cuvinte și fraze

  • (planificat) Căutare fuzzy

  • (planificat) Actualizare incrementală a indecșilor

  • (planificat) Indexarea paginilor web distante

Cerințe:

  • Python 2.2 sau mai recent

  • Spațiu suficient pe disc pentru a salva indecșii(aproximativ de două ori dimensiunea datelor originale)

Având la dispoziție aceste informații, cititorii pot să înțeleagă rapid dacă acest proiect are vreo șansă să îi ajute și pot lua în calcul să contribuie și ei ca dezvoltatori.

Starea dezvoltării

Oamenii vor întotdeauna să afle în ce stadiu se află proiectul. Pentru proiectele noi, vor să știe care e diferența dintre promisiunile proiectului și realitatea curentă. Pentru proiectele mature, vor să știe cât de activ sunt întreținute, cât de des apar noi versiuni, cât de rapid se răspunde la erorile raportate, etc.

Pentru a răspunde la astfel de întrebări, trebuie să existe o pagină pentru starea dezvoltării în care să se prezinte scopurile pe termen scurt ale proiectului și nevoile (de exemplu, se poate să fie nevoie de dezvoltatori cu o anumită expertiză). Pagina poate da și informații despre versiunile anterioare, cu liste de capabilități, astfel încât vizitatorii să înțeleagă cum definește proiectul ideea de „progres” și cât de rapid progresează în concordanță cu acea definiție.

Să nu vă fie frică să păreți nepregătiți și nu cedați tentației de a minți în legătură cu starea proiectului. Toată lumea știe că aplicațiile evoluează în etape; nu e nicio rușine în a spune „aplicația e în stadiul alpha și are bug-uri cunoscute. Rulează, și funcționează în cea mai mare parte a timpului, dar o folosiți pe propria răspundere”. O astfel de exprimare nu va speria dezvoltatorii de care e nevoie în această etapă. Cât despre utilizatori, unul dintre cele mai proaste lucruri pe care le poate face un proiect este să atragă utilizatori înainte ca aplicația să fie pregătită pentru ei. O reputație de de instabilitate sau probleme (bug-uri) este greu de înlocuit odată „câștigată”. Conservatorismul are meritele lui pe termen lung; întotdeauna e mai bine ca aplicațiaa să fie mai stabilă decât se așteaptă utilizatorul decât mai puțin stabilă și surprizele plăcute produc cea mai bună reputație.

Download-uri

Aplicația trebuie să poată fi descărcată ca și cod sursă într-un format standard. Când proiectul se află la început, pachetele binare (executabile) nu sunt necesare decât dacă aplicația are cerințe sau dependențe atât de complicate pentru a fi transformată în executabil încât ar fi prea greu pentru majoritatea oamenilor să o facă să ruleze. (Dacă aceasta e situația, proiectul va avea probleme serioase în a atrage dezvoltatori orice-ar fi).

Mecanismul de distribuție trebuie să fie cât mai convenabil, standardizat și simplu. Dacă ați încerca să eliminați o boală, nu ați distribui medicamentul într-un așa fel încât ar fi nevoie de o dimensiune non-standard de seringă pentru a-l administra. La fel, aplicația trebuie să fie conformă cu metodele de compilare și instalare standard; cu cât deviază mai mult de la standarde, cu atât vor renunța mai ușor potențialii dezvoltatori și utilizatori și vor pleca.

Deși sună evident, majoritatea proiectelor nu se obosesc să standardizeze procedurile de instalare până la o etapă foarte târzie, spunându-și că pot să facă asta oricând: "O să rezolvăm toate problemele astea când codul va fi mai aproape de a fi gata."Ceea ce nu realizează e că, amânând munca plictisitoare de a termina procedurile pentru compilare și instalare, ei de fapt prelungesc durata de care e nevoie pentru a termina—pentru că ei descurajează dezvoltatorii care altfel ar fi putut contribui la cod. Mai grav de-atât, ei nu știu că pierd toți acești dezvoltatori pentru că procesul este o acumulare de non-evenimente: cineva vizitează site-ul, downloadează aplicația, încearcă să o folosească, nu reușește, renunță și merge mai departe. Cine va ști vreodată că s-a întâmplat în afară de acea persoană? Nimeni care lucrează la proiect nu va realiza interesul acelei persoane și un lucru bun va fi irosit în mod tacit.

Munca plictisitoare care poate aduce câștiguri mari ar trebui să fie făcută întotdeauna devreme și reducerea semnificativă a barierelor în calea celor care vor să se alăture proiectului aduce câștiguri mari.

Când creați un pachet binar downloadabil, e vital să dați un număr unic de versiune astfel încât oamenii să poată compara două versiuni diferite și să știe care dintre ele e mai recentă. O discuție detaliată a modului în care se dau numerele de versiune apare în „Release Numbering”, iar detaliile despre standardizarea procedurilor de compilare și instalare sunt prezentate în „Packaging”, amândouă regăsite în Cap. 7, Packaging, Releasing, and Daily Development.

Version Control and Bug Tracker Access

Downloading source packages is fine for those who just want to install and use the software, but it's not enough for those who want to debug or add new features. Nightly source snapshots can help, but they're still not fine-grained enough for a thriving development community. People need real-time access to the latest sources, and the way to give them that is to use a version control system. The presence of anonymously accessible version controlled sources is a sign—to both users and developers—that this project is making an effort to give people what they need to participate. If you can't offer version control right away, then put up a sign saying you intend to set it up soon. Version control infrastructure is discussed in detail in „Version Control” in Cap. 3, Technical Infrastructure.

The same goes for the project's bug tracker. The importance of a bug tracking system lies not only in its usefulness to developers, but in what it signifies for project observers. For many people, an accessible bug database is one of the strongest signs that a project should be taken seriously. Furthermore, the higher the number of bugs in the database, the better the project looks. This might seem counterintuitive, but remember that the number of bugs recorded really depends on three things: the absolute number of bugs present in the software, the number of users using the software, and the convenience with which those users can register new bugs. Of these three factors, the latter two are more significant than the first. Any software of sufficient size and complexity has an essentially arbitrary number of bugs waiting to be discovered. The real question is, how well will the project do at recording and prioritizing those bugs? A project with a large and well-maintained bug database (meaning bugs are responded to promptly, duplicate bugs are unified, etc.) therefore makes a better impression than a project with no bug database, or a nearly empty database.

Of course, if your project is just getting started, then the bug database will contain very few bugs, and there's not much you can do about that. But if the status page emphasizes the project's youth, and if people looking at the bug database can see that most filings have taken place recently, they can extrapolate from that that the project still has a healthy rate of filings, and they will not be unduly alarmed by the low absolute number of bugs recorded.

Note that bug trackers are often used to track not only software bugs, but enhancement requests, documentation changes, pending tasks, and more. The details of running a bug tracker are covered in „Bug Tracker” in Cap. 3, Technical Infrastructure, so I won't go into them here. The important thing from a presentation point of view is just to have a bug tracker, and to make sure that fact is visible from the front page of the project.

Communications Channels

Visitors usually want to know how to reach the human beings involved with the project. Provide the addresses of mailing lists, chat rooms, and IRC channels, and any other forums where others involved with the software can be reached. Make it clear that you and the other authors of the project are subscribed to these mailing lists, so people see there's a way to give feedback that will reach the developers. Your presence on the lists does not imply a committment to answer all questions or implement all feature requests. In the long run, most users will probably never join the forums anyway, but they will be comforted to know that they could if they ever needed to.

In the early stages of a project, there's no need to have separate user and developer forums. It's much better to have everyone involved with the software talking together, in one "room." Among early adopters, the distinction between developer and user is often fuzzy; to the extent that the distinction can be made, the ratio of developers to users is usually much higher in the early days of the project than later on. While you can't assume that every early adopter is a programmer who wants to hack on the software, you can assume that they are at least interested in following development discussions and in getting a sense of the project's direction.

As this chapter is only about getting a project started, it's enough merely to say that these communications forums need to exist. Later, in „Handling Growth” in Cap. 6, Communications, we'll examine where and how to set up such forums, the ways in which they might need moderation or other management, and how to separate user forums from developer forums, when the time comes, without creating an unbridgeable gulf.

Developer Guidelines

If someone is considering contributing to the project, she'll look for developer guidelines. Developer guidelines are not so much technical as social: they explain how the developers interact with each other and with the users, and ultimately how things get done.

This topic is covered in detail in „Writing It All Down” in Cap. 4, Social and Political Infrastructure, but the basic elements of developer guidelines are:

  • pointers to forums for interaction with other developers

  • instructions on how to report bugs and submit patches

  • some indication of how development is usually done—is the project a benevolent dictatorship, a democracy, or something else

No pejorative sense is intended by "dictatorship", by the way. It's perfectly okay to run a tyranny where one particular developer has veto power over all changes. Many successful projects work this way. The important thing is that the project come right out and say so. A tyranny pretending to be a democracy will turn people off; a tyranny that says it's a tyranny will do fine as long as the tyrant is competent and trusted.

See http://subversion.apache.org/docs/community-guide/ for an example of particularly thorough developer guidelines, or http://www.openoffice.org/dev_docs/guidelines.html for broader guidelines that focus more on governance and the spirit of participation and less on technical matters.

The separate issue of providing a programmer's introduction to the software is discussed in „Developer documentation” later in this chapter.

Documentation

Documentation is essential. There needs to be something for people to read, even if it's rudimentary and incomplete. This falls squarely into the "drudgery" category referred to earlier, and is often the first area where a new open source project falls down. Coming up with a mission statement and feature list, choosing a license, summarizing development status—these are all relatively small tasks, which can be definitively completed and usually need not be returned to once done. Documentation, on the other hand, is never really finished, which may be one reason people sometimes delay starting it at all.

The most insidious thing is that documentation's utility to those writing it is the reverse of its utility to those who will read it. The most important documentation for initial users is the basics: how to quickly set up the software, an overview of how it works, perhaps some guides to doing common tasks. Yet these are exactly the things the writers of the documentation know all too well—so well that it can be difficult for them to see things from the reader's point of view, and to laboriously spell out the steps that (to the writers) seem so obvious as to be unworthy of mention.

There's no magic solution to this problem. Someone just needs to sit down and write the stuff, and then run it by typical new users to test its quality. Use a simple, easy-to-edit format such as HTML, plain text, Texinfo, or some variant of XML—something that's convenient for lightweight, quick improvements on the spur of the moment. This is not only to remove any overhead that might impede the original writers from making incremental improvements, but also for those who join the project later and want to work on the documentation.

One way to ensure basic initial documentation gets done is to limit its scope in advance. That way, writing it at least won't feel like an open-ended task. A good rule of thumb is that it should meet the following minimal criteria:

  • Tell the reader clearly how much technical expertise they're expected to have.

  • Describe clearly and thoroughly how to set up the software, and somewhere near the beginning of the documentation, tell the user how to run some sort of diagnostic test or simple command to confirm that they've set things up correctly. Startup documentation is in some ways more important than actual usage documentation. The more effort someone has invested in installing and getting started with the software, the more persistent she'll be in figuring out advanced functionality that's not well-documented. When people abandon, they abandon early; therefore, it's the earliest stages, like installation, that need the most support.

  • Give one tutorial-style example of how to do a common task. Obviously, many examples for many tasks would be even better, but if time is limited, pick one task and walk through it thoroughly. Once someone sees that the software can be used for one thing, they'll start to explore what else it can do on their own—and, if you're lucky, start filling in the documentation themselves. Which brings us to the next point...

  • Label the areas where the documentation is known to be incomplete. By showing the readers that you are aware of its deficiencies, you align yourself with their point of view. Your empathy reassures them that they don't face a struggle to convince the project of what's important. These labels needn't represent promises to fill in the gaps by any particular date —it's equally legitimate to treat them as open requests for volunteer help.

The last point is of wider importance, actually, and can be applied to the entire project, not just the documentation. An accurate accounting of known deficiencies is the norm in the open source world. You don't have to exaggerate the project's shortcomings, just identify them scrupulously and dispassionately when the context calls for it (whether in the documentation, in the bug tracking database, or on a mailing list discussion). No one will treat this as defeatism on the part of the project, nor as a commitment to solve the problems by a certain date, unless the project makes such a commitment explicitly. Since anyone who uses the software will discover the deficiencies for themselves, it's much better for them to be psychologically prepared—then the project will look like it has a solid knowledge of how it's doing.

Availability of documentation

Documentation should be available from two places: online (directly from the web site), and in the downloadable distribution of the software (see „Packaging” in Cap. 7, Packaging, Releasing, and Daily Development). It needs to be online, in browsable form, because people often read documentation before downloading software for the first time, as a way of helping them decide whether to download at all. But it should also accompany the software, on the principle that downloading should supply (i.e., make locally accessible) everything one needs to use the package.

For online documentation, make sure that there is a link that brings up the entire documentation in one HTML page (put a note like "monolithic" or "all-in-one" or "single large page" next to the link, so people know that it might take a while to load). This is useful because people often want to search for a specific word or phrase across the entire documentation. Generally, they already know what they're looking for; they just can't remember what section it's in. For such people, nothing is more frustrating than encountering one HTML page for the table of contents, then a different page for the introduction, then a different page for installation instructions, etc. When the pages are broken up like that, their browser's search function is useless. The separate-page style is useful for those who already know what section they need, or who want to read the entire documentation from front to back in sequence. But this is not the most common way documentation is accessed. Far more often, someone who is basically familiar with the software is coming back to search for a specific word or phrase. To fail to provide them with a single, searchable document would only make their lives harder.

Developer documentation

Developer documentation is written to help programmers understand the code, so they can repair and extend it. This is somewhat different from the developer guidelines discussed earlier, which are more social than technical. Developer guidelines tell programmers how to get along with each other; developer documentation tells them how to get along with the code itself. The two are often packaged together in one document for convenience (as with the http://subversion.apache.org/docs/community-guide/ example given earlier), but they don't have to be.

Although developer documentation can be very helpful, there's no reason to delay a release to do it. As long as the original authors are available (and willing) to answer questions about the code, that's enough to start with. In fact, having to answer the same questions over and over is a common motivation for writing documentation. But even before it's written, determined contributors will still manage to find their way around the code. The force that drives people to spend time learning a code base is that the code does something useful for them. If people have faith in that, they will take the time to figure things out; if they don't have that faith, no amount of developer documentation will get or keep them.

So if you have time to write documentation for only one audience, write it for users. All user documentation is, in effect, developer documentation as well; any programmer who's going to work on a piece of software will need to be familiar with how to use it. Later, when you see programmers asking the same questions over and over, take the time to write up some separate documents just for them.

Some projects use wikis for their initial documentation, or even as their primary documentation. In my experience, this really only works if the wiki is actively edited by a few people who agree on how the documentation is to be organized and what sort of "voice" it should have. See „Wikis” in Cap. 3, Technical Infrastructure for more.

Example Output and Screenshots

If the project involves a graphical user interface, or if it produces graphical or otherwise distinctive output, put some samples up on the project web site. In the case of interface, this means screenshots; for output, it might be screenshots or just files. Both cater to people's need for instant gratification: a single screenshot can be more convincing than paragraphs of descriptive text and mailing list chatter, because a screenshot is inarguable proof that the software works. It may be buggy, it may be hard to install, it may be incompletely documented, but that screenshot is still proof that if one puts in enough effort, one can get it to run.

There are many other things you could put on the project web site, if you have the time, or if for one reason or another they are especially appropriate: a news page, a project history page, a related links page, a site-search feature, a donations link, etc. None of these are necessities at startup time, but keep them in mind for the future.

Canned Hosting

There are a few sites that provide free hosting and infrastructure for open source projects: a web area, version control, a bug tracker, a download area, chat forums, regular backups, etc. The details vary from site to site, but the same basic services are offered at all of them. By using one of these sites, you get a lot for free; what you give up, obviously, is fine-grained control over the user experience. The hosting service decides what software the site runs, and may control or at least influence the look and feel of the project's web pages.

See „Canned Hosting” in Cap. 3, Technical Infrastructure for a more detailed discussion of the advantages and disadvantages of canned hosting, and a list of sites that offer it.