|
|
|
|
|
by dvanduzer
4749 days ago
|
|
If I understand you correctly, you're saying the dependency graph and the "change-flow network" are completely orthogonal. Separation of concerns is a value of good software projects. But there are practical realities that the author of the article enumerates specifically. If there is a tight coupling between his application and a handful of upstream libraries, packagers are far more likely to break his application by distributing the latest version of that shared library. Other applications that aren't as tightly coupled can handle that upgrade. Since it is tightly coupled, he's going to be highly attuned to the upgrade needs for his specific statically compiled version. |
|
If the dependency graph G = (V, E) has a vertex for every software project and an edge x -> y iff downstream project y depends on upstream project x, then the change-flow network is the graph C = (V, F), where there is an edge x -> y in F iff there is a downstream path between x and y in G and also y requires an update and re-release when x changes (e.g., because it bundles a copy of x in its releases).
So if there is a change to project x, for it to flow to all affected dependents, you must update all downstream neighbors of x in the change-flow network C.
For example, consider the following dependency graph, in which library L is used by downstream library L2, and L2 by project P:
If none of the projects bundle their upstream dependencies in their own releases, then the corresponding change-flow network has no edges, and updating any project requires only re-releasing its own package to satisfy all dependencies: But if L2 bundles a copy of L, and P bundles a copy of L2, then the corresponding network looks like this: A change to L requires re-releasing not only L but also L2, and P. A change to L2 requires re-releasing L2 and also P.Does that make more sense now?