Save 37% off PRO during our Black Friday Sale! »

Kernel development

Kernel development

A rapid overview on how is the Linux Kernel developed.
Who? How? Why?

213572ebd756969c777f558e23959e6c?s=128

Ezequiel Garcia

December 01, 2012
Tweet

Transcript

  1. Desarrollo del Linux Kernel Ezequiel García (Greg Kroah-Hartman) github.com/ezeqeuielgarcia/kernel-development

  2. Reglas de la charla * Si hablo muy bajo ...

    * Si hablo muy rápido ... * Si no entienden algo … * Si algo/alguien los muerde ... ¡GRITEN!
  3. ¿Qué diablos es el kernel? $ strace cp .bashrc a_copy

    open(".bashrc", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=192, ...}) = 0 open("a_copy", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = 4 fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 read(3, "\nexport LD_LIBRARY_PATH=$LD_LIBR"..., 32768) = 192 write(4, "\nexport LD_LIBRARY_PATH=$LD_LIBR"..., 192) = 192 read(3, "", 32768) = 0 close(4) = 0 close(3) = 0
  4. GIT • Creado en Abril/2005 por Linus Torvalds a partir

    de la necesidad de un SCM para el kernel • Es distribuido • Es la herramienta más común de los programadores Linux: Se usa para generar, aplicar y enviar por mail los parches, y hasta buscar (git grep!).
  5. cambios == patches • Cada cambio que se hace al

    kernel tiene forma de un parche • Cada parche se envía por mail para su revisión y para ser incluído en el repositorio correspondiente • Cada parche debe: hacer una sola cosa, no romper la compilación, y muchas reglas más ...
  6. 38.566 archivos 15.384.000 lineas 2.6.20 to 2.6.24-rc Kernel release 3.4.0

  7. 2.833 contribuidores 373 empresas Kernel releases 3.0.0 – 3.4.0 May

    2011 – May 2012
  8. 10,500 lineas agregadas 8,400 lineas removidas 2,300 lineas modificadas 2.6.20

    to 2.6.24-rc Kernel releases 3.0.0 – 3.4.0 May 2011 – May 2012 ¡TODOS LOS DÍAS!
  9. 5,79 cambios por hora 2.6.20 to 2.6.24-rc Kernel releases 3.0.0

    – 3.4.0 May 2011 – May 2012
  10. ¿Cómo no nos volvemos locos? 2.6.20 to 2.6.24-rc * Cambios

    incrementales * Releases regulares
  11. ¿Cómo no nos volvemos locos? 2.6.20 to 2.6.24-rc * Cambios

    incrementales * Releases regulares
  12. cambios == patches • Cada cambio que se hace al

    kernel tiene forma de un parche • Cada parche se envía por mail para su revisión y para ser incluído en el repositorio correspondiente • Cada parche debe: hacer una sola cosa, no romper la compilación, y muchas reglas más ...
  13. commit e0f6e4d6ff8d82ca6813f47d12f85224d7491d9e Author: Ezequiel Garcia <elezegarcia@gmail.com> Date: Wed Sep 26

    06:25:12 2012 -0300 [media] em28xx: Replace memcpy with struct assignment This kind of memcpy() is error-prone and its replacement with a struct assignment is prefered. Signed-off-by: Ezequiel Garcia <elezegarcia@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com> diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c index ab98d08..bd5e180 100644 --- a/drivers/media/usb/em28xx/em28xx-cards.c +++ b/drivers/media/usb/em28xx/em28xx-cards.c @@ -2203,7 +2203,7 @@ EXPORT_SYMBOL_GPL(em28xx_tuner_callback); static inline void em28xx_set_model(struct em28xx *dev) { - memcpy(&dev->board, &em28xx_boards[dev->model], sizeof(dev- >board)); + dev->board = em28xx_boards[dev->model]; /* Those are the default values for the majority of boards Use those values if not specified otherwise at boards entry
  14. Developer's Certificate of Origin (http://elinux.org/Developer_Certificate_Of_Origin) (a) Soy el autor del

    cambio; o (b) Me basé en un trabajo anterior con una licencia compatible; o (c) Alguien me hizo este cambio, cumpliendo (a), (b), o (c) y no lo modifiqué. (d) Esta contribución es pública
  15. ¿Cómo no nos volvemos locos? 2.6.20 to 2.6.24-rc * Cambios

    incrementales * Releases regulares
  16. Nuevo release cada 2 meses y chirolas Kernel releases 2.6.20

    – 3.4.0
  17. v3.3: 18 marzo v3.4: 20 mayo v3.5: 21 julio v3.6:

    30 setiembre v3.7: 11 diciembre wtf!
  18. None
  19. None
  20. None
  21. None
  22. None
  23. None
  24. None
  25. ¿Quién saca la billetera? 1. “Amateurs” 14.2% 2. Red Hat

    10.1% 3. Intel 8.6% 4. Unknown Individuals 5.2% 5. Novell 4.0% 6. IBM 3.7% 7. Texas Instruments 3.6% 8. Broadcom 3.0% 9. Consultants 2.3% 10. Wolfson Micro 2.1% Kernel releases 3.0.0 – 3.4.0
  26. ¿Quién saca la billetera? 11. Samsung 1.9% 12. Google 1.8%

    13. Oracle 1.7% 14. Freescale 1.5% 15. MiTAC 1.4% 16. Qualcomm 1.4% 17. Microsoft 1.3% 18. Linaro 1.2% 19. Nokia 1.2% 20. AMD 1.1% Kernel releases 3.0.0 – 3.4.0
  27. Evolución vs. Diseño inteligente Decimos que el desarrollo en el

    kernel Linux es “evolución, no diseño inteligente”, pues las soluciones se piensan para los problemas a medida que estos aparecen Greg Kroah-Hartman
  28. ¿Cómo participar? 2.6.20 to 2.6.24-rc

  29. 2.6.20 to 2.6.24-rc ¿Cómo participar?

  30. 2.6.20 to 2.6.24-rc Documentation/HOWTO Documentation/development-proces ¿Cómo participar?

  31. 2.6.20 to 2.6.24-rc ¿Cómo participar?

  32. World domination proceeds as planned