This document provides guidance for developers who want to contribute code to the Linux kernel. It emphasizes the importance of the social and technical aspects of upstream development. Socially, developers are advised to release their code early and often to get feedback from the community. They should avoid unnecessary abstraction and re-inventing existing solutions. Technically, developers should follow best practices like using well-designed APIs and solving problems that are common across hardware. The document also provides practical tips for submitting patches, dealing with feedback, and getting help from experienced members of the open source community.