Dependencies and reverse dependencies: Python vs. R

Julie Tibshirani reflects on how the #R ecosystem uniquely manages dependencies through reverse dependency checks on #CRAN. R’s approach comes at a cost to developers, but also fosters a culture of empathy and responsibility among package maintainers, ultimately benefiting researchers and data scientists by minimizing dependency conflicts and easing migrations.
Author
Published

September 26, 2025

Julie Tibshirani reflects on how the R1 ecosystem handles dependencies2 radically differently than Python (or most, if not all, programming languages):

Learning R has expanded how I think as a software engineer, precisely because its perspective and community are so different to my own. This post explores one unique aspect of the R ecosystem, reverse dependency checks, and how it changed the way I approach software maintenance.

What is a “reverse dependency check”? It’s an approach where upon you submitting a package to be published on CRAN3, the CRAN team runs not just the tests for your packages but also the tests for all packages that depend on your package. The CRAN team thus ensures that package developers inform maintainers of dependent packages in time about breaking changes and potentially assist them in migrating.

Julie goes on:

My initial reaction to CRAN’s reverse dependency checks was one of shock and concern. (…) I (…) didn’t understand why it was my responsibility to help update other packages (whose code I may not understand or endorse) before mine could be released. The concept of reverse dependency checks felt truly radical. So why does CRAN perform these checks?

(…)

[CRAN’s approach] results in an excellent workflow for R’s central user base: the researchers and data scientists who want to spend as much time as possible on the details of data analysis, not stuck in transitive dependency hell.

(…)

I believe CRAN’s is truly the right mindset for running migrations. It places you in a powerful state of extreme empathy — that our user’s code is our responsibility, and that their success is ours too.

The article has much more context and background. Food for thought.

Footnotes

  1. R is a programming language for statistical computing and data analysis.↩︎

  2. In the context of software, “dependency” describes the relationship where one software component (A) relies on another (B) to function. In this case, B is a dependency of A.↩︎

  3. The “Comprehensive R Archive Network”, the central package manager of the R ecosystem, similar to PyPi for Python.↩︎