1 of 22

18.04.2010

Modelul de dezvoltare al nucleului Linux

Octavian Purdilă

tavi@cs.pub.ro

18 aprilie 2010

2 of 22

Powered by Linux (Kernel)

18.04.2010

servers

desktops

n900

nexus 1

tivo

kindle

google.com

cloud computing

samsung HL-T6189S LED DLP

cisco ace

sony PRS-505

motorala droid

phillips aurea

mainframes

vivopay 8100

misa digital guitar

3 of 22

18.04.2010

4 of 22

18.04.2010

5 of 22

Linux 2.6.33

  • 83 de zile
  • 10,500 commit-uri
  • +900,000, -520,000 linii de cod
  • 1152 contribuitori
  • 182 de companii
  • RedHat, Intel, IBM, Novell, Nokia, Fujitsu, Texas Instruments, Atheros Communications, (Academia), (Consultants), AMD, Oracle, Analog Devices, Renesas Technology, Pengutronix, HP, Samsung, VMWare, Realtek, Broadcom, Solarflare Communications

18.04.2010

6 of 22

De ce contribuie firmele upstream ?

  • Maintenance cost
  • Review
  • Testare
  • Training
  • Freebies
  • Influence
  • Employee recognition

18.04.2010

7 of 22

1810 - 1835, Cornwell, UK

  • Trevnick inventează motorul cu aburi de tip “Cornish” pe care nu îl patentează
  • Un grup de manageri de mină decid să pună bazele unui jurnal tehnic în care să se descrie îmbunătăţirile aduse motorului
  • Diverse mine angajează ingineri pentru a îmbunătăţi motorul; rezultatele sunt publicate în jurnal
  • Eficienţa motoarelor cu aburi creşte de 5 ori faţă de perioada anterioară

18.04.2010

8 of 22

Modelul de dezvoltare iniţial

  • Două versiuni
    • Stabilă (1.0, 2.0, 2.2, 2.4)
    • Dezvoltare (0.x, 1.1, 2.3, 2.5)
  • Linus este maintainer-ul pentru versiunile de dezvoltare
  • Versiunile stabile au alţi mainteineri (Alan Cox, Marcelo Tosati)
  • Timpul dintre două versiuni stabile majore: 1-2 ani

18.04.2010

9 of 22

Patch based model

  • Modificările sunt trimise sub formă de patch-uri
  • Patch-urile sunt revizuite şi discutate pe liste de discuţii
  • Maintainerii primesc path-urile de la developeri, le testeaza si organizează în forma unor seturi de patch-uri pe care le trimit apoi mai departe la Linus
  • Linus acceptă patch-uri direct de la developeri sau de la maintaineri
  • “Linus burnouts”

18.04.2010

10 of 22

BitKeeper

  • SCM distribuit, closed source
  • Folosit pentru dezvoltarea Linux începând cu 2 Feb 2002 (2.5.3)
  • Fiecare maintainer menţine un “bk tree”
  • (maintainerii ce nu folosesc BitKeeper trimit în continuare seturi de patch-uri)
  • Linus aduce în tree-ul priopriu modificarile direct din tree-urile maintainerilor

18.04.2010

11 of 22

Linux 2.6.0

  • 680 zile (17 Decembrie 2003)
  • 27,149 patch-uri (1.66 patches/hr)
  • 916 contribuitori
  • Perioada de stabilizare
    • 2.6.0 – 2.6.8 (August 2004, 2.2 patches/hr)

18.04.2010

12 of 22

-mm tree

  • Menţinut de Andrew Morton
  • Folosit pentru a detecta şi rezolva conflictele din timp
  • Conţine toate patch-urile şi tree-urile bk ale maintainerilor
  • Linus trage modificările direct din tree-urile bk ale maintainerilor şi integrează patch-urile din -mm

18.04.2010

13 of 22

Linux 2.6.8

  • 8 luni de “stabilizare”
  • +1,200,000, -850,000 linii de cod
  • ~1/3 din kernel a fost modificat
  • KS2008: Se renunţă la modelul în care există un branch de dezvoltare separat, toate versiunile 2.6 vor fi versiuni stabile
  • Linux 2.6.x.y: doar security & bug fixes
  • (stable team: Greg KH & Chris Wright)

18.04.2010

14 of 22

Linux 2.6.x (x >8)

  • Merge window (7 – 14 zile)
  • Se releasează -rc1, -rc2
  • Urmează apoi o perioadă de ~ 8 saptămâni în de stabilizarea (bug fixing only)
  • Se scoate un nou release candidate în fiecare săptămână (rc3, ..., rc8)

18.04.2010

15 of 22

git

  • Andrew Tridgell “dezasamblează” protocolul BitKeeper
  • Larry McVoy opreşte dezvoltarea versiunii free (folosită de dezvoltatorii Linux)...
  • Şi refuză să vindă licenţe comerciale către oricine este angajat OSDL
  • Linus face o “pauză” şi scrie git

18.04.2010

16 of 22

Modelul curent de dezvoltare

18.04.2010

17 of 22

Git trees

  • Linus
  • mm (Andrew Morton)
  • next (Steven Rothwell)
  • net-2.6, net-next-2.6; sparc-2.6, sparc-next-2.6 (David Miller)
  • ...
  • 2.6.32.y (stable team)

18.04.2010

18 of 22

Quality Assurance

  • Bugzilla.kernel.org
  • http://kerneloops.org/ (Arjan van de Ven)
  • Regression tracking (Rafael J. Wysocki)
  • Tip testing (Redhat, Ingo Molnar)
  • Sparse
  • Coccinelle (Julia Lawall)
  • Patchwork
  • scripts/checkpatch.pl

18.04.2010

19 of 22

Contributing tips

  • Lurking pe listele de discuţii pentru a învăţa procesul (diferă minor în fiecare subsistem)
  • Lasă timp pentru review (cel puţin 3 zile) înainte de a da “bump”
  • Dacă lista are un site patchwork asociat, verifică starea patch-ului înainte de a face bump
  • Trimite modificările într-un set de patch-uri; fiecare patch trebuie să facă un singur lucru
  • Verifică coding style-ul înainte de trimitere (scripts/checkpath.pl)

18.04.2010

20 of 22

Contributing tips (2)

  • When in doubt, trimite patch-uri pentru -next
  • Fii responsive, mai ales cu bug-urile care îţi sunt raportate
  • Pregăteşte-te să treci prin mai multe iteraţii de submit, review, fix, resend
  • Foloseşte git şi branch-uri (câte unul pentru fiecare patch set pe care îl trimiţi)
  • Caută “aliaţi” pe listă şi lucraţi împreună

18.04.2010

21 of 22

Contributing tips (3) – Subiect email

  • [net-next PATCH]
  • [PATCH 0/2], [PATCH 1/2], [PATCH 2/2]
  • [RFC]
  • [RFC PATCH]
  • [RESEND] [PATCH]
  • [net-next PATCH v3 0/1]

18.04.2010

22 of 22

18.04.2010