Table of Contents
Upstreaming is a critical process in the collaborative maintenance and development of software. The creators, or more specifically, the maintainers of software, are referred to as upstream. Code is released downstream to a community of users.
If a collaborator downstream proposes a patch, perhaps to enhance functionality, improve performance or close a security gap, they push the proposal upstream to the maintainers of the upstream repository. The code maintainer can then decide to incorporate the proposal, or reject it. If incorporated, it is included in a future distribution and pushed downstream. Alternatively, a proposal can be adopted as a patch that is also pushed downstream as an update or bug fix.
If a proposal is rejected, the proposer can continue to accept the down streamed distribution or choose to maintain a novel version that is forked or divergent from the mainstream version. Maintainers of the novel version can themselves become down streamers, maintaining a new distribution used for special purposes by particular communities of users, or used in connection with vendor-specific applications.
New distributions bring all the maintenance requirements associated with being upstream. Novel distributions can become authoritative versions with a vibrant community of collaborators. Over time, the divergence can become so great that links with the original up streamers are broken. However, it is more common that maintainers cherry pick patches from the upstream, particularly those related to security.
Upstreaming is a fundamental process in collaborative software development, bringing standardisation, improved performance, enhanced security and evolving functionality to a community of users. Up streamers in turn benefit from the testing efforts and expertise of downstream users. The community benefits from the collaborative and collective efforts of the community. Unintended consequences, such as degraded performance, of improvements in down streamed code are avoided. A virtuous cycle of improvement and assurance pushes the community forward.
Linaro and upstreaming
The active role we play in the Arm software ecosystem and the technical domain experts we employ also result in solutions being upstreamed quicker. Our automated testing capabilities and security expertise ensure products are more secure and of higher quality when they end up in the hands of end users.
Toolchain benchmarking and analysis is a linchpin of Linaro’s Open Source toolchain community citizenship. It is foundational to overall toolchain quality and Continuous Integration (CI) efforts. The detection of code-speed regressions, code-size regressions and build/boot breakages helps ensure the quality and robustness of Open-Source toolchains.
In-house engineers are empowered to collaborate and share information across architectures and configurations. The ability to identify problematic commits immediately intimately links them with the upstream project community. Instead of feeling like victims of unanticipated changes, they can exert an almost immediate influence.
Participants can better deploy engineering resources and feel assured their investments are protected. Organisations that maintain bespoke solutions can feel confident that they are benchmarked against the best the open source community can offer, protecting their market position particularly in performance sensitive verticals such as HPC.