Difference between revisions of "Kernel Mainlining"

From eLinux.org
Jump to: navigation, search
(Presentations: add more details to presentation list)
(talk list: add more details)
Line 30: Line 30:
 
* [[Media:CommunityDevelopment.pdf|Cooperative Development Inside Communities]] ELC-2009 Jeff Osier-Mixon
 
* [[Media:CommunityDevelopment.pdf|Cooperative Development Inside Communities]] ELC-2009 Jeff Osier-Mixon
 
** This is the talk introducing MELD.
 
** This is the talk introducing MELD.
* ELC-2011 Arnd Bergmann*
+
* [[Media:Elc2011_bergmann_keynote.pdf|Becoming Part of the Linux Kernel Community]] ELC-2011, April, 2011, Arnd Bergmann
* ELCE-2011 Satoru Ueda
+
* Contributing to the Community? Does your manager support you? - ELCE-2011 Satoru Ueda
* ELCE-2012 Matt Locke
+
** This is a "how to convince your manager" talk.
 
* ELC-2013 rose
 
* ELC-2013 rose
 
* ELC-2013 chalmers
 
* ELC-2013 chalmers

Revision as of 15:40, 11 July 2014

This page has information for embedded developers about mainlining patches to the Linux kernel.

General Resources

Presentations

Greg KH has a great presentation about how the community works, with links to references for getting started:

An older talk (2008) by Andrew Morton discusses the reasons to contribute, and best practices for contributing to the upstream kernel

  • Session:kernel.org development and the embedded world
    • In this seminal talk from 2008, Andrew lays out the case for involvement of embedded companies in kernel development. He describes the overall process, but more importantly what to expect from kernel developers, what to do and not to do when approaching mainlining, and how to structure teams for effective work with the kernel community.

talk list

Here is a list of talks about mainlining and community involvement, from previous Linux conferences:

  • How to Participate in the Kernel Development Process (PDF) - ELC-2007, April 2007, Jonathan Corbet
    • This talk is an attempt to identify the factors which lead to success or failure and present them in a way that will help others seeking to get code into the kernel.
  • ELC-2008 morton (noted above)
  • Appropriate Community Practices: Social and Technical Advice - ELC-2008, April 2008 Deepak Saxena
    • Abstract: With the increasing popularity of Linux in the embedded world, HW vendors are jumping on the bandwagon to add kernel support for their devices/chipsets/SOCs. We in the community keep seeing the same mistakes made (both technical and social) repetitively. We will go over the benefits of being involved with the community and utilize examples of what not do when working within the Linux development ecosystem to illustrate appropriate practices to increase your probability of successful code adoption into the kernel.org tree.
    • (presentation not available)
  • Embedded maintainers: Community and Embedded Linux ELCE-2008, David Woodhouse
    • This presentation introduces and discusses the new community rôle of 'embedded maintainer', present David's ideas and seek other opinions on what the job is actually supposed to mean.
    • The community at large needs to be more coherent - it's not just about big companies playing nicely with us, but also about building a community around embedded Linux in a way that we haven't really done so far. Even the individual projects aren't working together as well as they should. The 'embedded maintainer' rôle isn't like other maintainers in the kernel - we don't own a certain section of the code and just act as gatekeeper and arbiter of taste for it. It's more about bringing people together and getting them to collaborate better.
  • [[Embedded Linux and Mainline Kernel - ELC-2009, April 2009, David Woodhouse
    • Embedded Linux has more in common, technologically, with other Linux use areas than many embedded developers realize. In this talk, David will describe some of the important intersections between the features embedded developers care about and those needed for enterprise and desktop systems. The stereotype of embedded developers not needing to interact with the greater Linux community is wrong. David provides the technical rationale for increased interaction in the community as well as tips for better involvement by embedded developers.
    • Notes: find other parties with same requirements - look outside embedded. Virtualized systems is a good place to look, as they often have resource constraints as well.
  • Cooperative Development Inside Communities ELC-2009 Jeff Osier-Mixon
    • This is the talk introducing MELD.
  • Becoming Part of the Linux Kernel Community ELC-2011, April, 2011, Arnd Bergmann
  • Contributing to the Community? Does your manager support you? - ELCE-2011 Satoru Ueda
    • This is a "how to convince your manager" talk.
  • ELC-2013 rose
  • ELC-2013 chalmers
  • ELC-2014 maupin

Training, tutorials and challenges

  • The Outreach Program For Women has an excellent tutorial on the steps for contributing one's first patch to the kernel

Specific Projects

Notes for Best Practices

from Deepak Saxena

  • don't be arrogant - don't assume your experience in proprietary development methods translates into open source
    • be humble and listen to others
  • release early and often
    • not doing this wastes a lot of time on implementations that get discarded, rewritten
  • do your homework
    • see what's already there in Linux, and whether it can be extended to support your case
    • add to existing abstractions rather than add your uniqe solution (be willing to abandon your code, as long as you ultimately get support for your feature upstream)
  • don't add OS abstractions (or, HALS for other OSes)
    • drivers must be Linux native - other layers and abstractions complicate the drivers - they can't be maintained by Linux kernel developers
  • do add abstractions - don't just solve your immediate problem
    • write systems that suport multiple related hardware
    • be willing to generalize
  • do your homework
    • use mainlining resources
    • ask informed questions
  • work with the community - treat them as equals on your team
    • treat external developers input as you would your own team members
    • be respectful

Jonathan Corbet

  • why - <check out the presentation>
  • difference between proprietary and open source software
    • proprietary = product-driven, top-down requirements, short-term, internal QA, hierarchical decisions, private code base, complete control
    • open source = process-drive, bottom-up requirements, long-term, external QA, consensus decisions, public code, little control
  • Understand the patch life-cycle
    • post early, fix things with community
    • get to staging
    • acceptance into mainline
  • post early and often
  • submitting patches
    • send changes - can influence direction even if not accepted
    • no: multi-purpose patches - make each patch small and indpendent
    • make patch serieses bisectable
    • follow submission rules
      • use diff -u, no MIME, correct format, Signed-off-by line, watch word-wrapping
    • send to correct place: MAINTAINERS, get-maintainer.pl
    • listen to reviewers, be polite, don't ignore feedback
  • let go
    • your code may be re-written or replaced
  • Coding
    • follow the style guides
      • not too much (HAL layers, unused parameters, single-line functions)
        • no multi-OS code
      • not too little - should generalize if there's already existing code
    • don't break APIs
      • can break internal APIs (only with very good reason), but you must fix all in-tree code
      • NEVER, NEVER break user-space API
    • don't cause regressions