It’s a simple question, but one that we don’t ask out loud enough, perhaps?
What is upstream software?
This question came up during conversations with Red Hat’s Chris Wright, a Linux kernel developer and a principal software engineer with the company.
Of course, in non-tech business speak, upstream tends to refer to production processes that involves searching for (and extracting) raw materials — in software, this is not the case.
In software application development and programming, upstream refers to source code that has been posted/hosted into/onto the code repository.
Upstream code can be complete code blocks, or patches and/or bug fixes.
Shamefully, we find a good comment on Wikipedia here, “For example, a patch sent upstream is offered to the original authors or maintainers of the software. If accepted, the authors or maintainers will include the patch in their software, either immediately or in a future release. If rejected, the person who submitted the patch will have to maintain his or her own distribution of the author’s software.”
What is downstream?
Downstream, in contrast, is code that has been deployed – and so, with reference to the above quote, downstream may be diverging away as some forked tributary (Ed – nice, I see what you did there with the river analogy) which needs to be separately considered and maintained.
Augmentations that will be available for all coders should be performed on the upstream code, the water-source (Ed – nice, another one) if you like.