We shouldn't have needed lockfiles
Site UX and Readability
- Many found the page nearly unreadable due to: bright yellow background, intrusive “presence” animation with moving avatars, and gimmicky “dark mode.”
- Multiple workarounds suggested: reader mode, disabling JS, ad/script blockers, DOM hacks (
#presenceremoval, CSSdisplay: none), or custom extensions. - Some also raised mild privacy concerns about exposing viewer locations to all visitors.
What Lockfiles Are For
- Several comments stress: package specs express intent (ranges or desired versions); lockfiles record the actual resolved graph so builds are deterministic and controllable over time.
- Lockfiles let you decide when to re-run resolution (e.g., via
npm ci,bundle install,cargo/pip-tools, automated “update & test” pipelines). - Without lockfiles, rebuilding or reinstalling can silently change many transitive dependencies, causing “it broke with zero code changes” failures.
Maven, Java, and “No-Lockfile” Approaches
- The article cites Maven as proof lockfiles aren’t needed. Many strongly disagree:
- Maven’s “nearest definition wins” (or Gradle’s “highest version wins”) can silently pick surprising versions of transitive deps.
- Real-world stories: runtime
NoSuchMethodError, JUnit/Spring conflicts, whack‑a‑mole overrides, and reliance on plugins like Enforcer. - Maven’s
<dependencyManagement>and manual overrides effectively act as a smeared-out lockfile with worse ergonomics and no central single source of truth.
- Others report years of smooth Maven use and see Node’s culture/ecosystem as the bigger problem, not lockfiles per se.
Version Ranges, SemVer, and Security
- Pro‑range arguments:
- Allow resolving conflicts between libraries that would otherwise pin slightly different versions.
- Enable consumers to pick up security/bugfix releases in transitive deps without waiting for every upstream to republish.
- SemVer is a social contract, imperfect but “good enough” in many ecosystems; misuse tends to be punished socially.
- Skeptical view:
- Future-compatible ranges are guesses; SemVer is only a hint.
- Some ecosystems (Node) have seen severe breakage from careless minor/patch updates.
- Several note: even with ranges, security and supply-chain concerns motivate lockfiles or equivalent hash-based mechanisms (Go’s
go.sum, distro specs, vendoring).
Ecosystem Differences and Alternatives
- Python: shared environments make conflicts from pinned versions especially painful; tools often enforce strict, overlapping ranges plus lockfiles only at the application layer.
- Go: Minimal Version Selection and
go.sumoffer deterministic selection without a traditional lockfile, but still rely on checksums and have their own edge cases. - Scala and others combine strict versions, compatibility schemes, and conflict checks to avoid Maven-style “YOLO” resolution.
- Some argue full vendoring is the only truly future‑proof approach; others see it as too heavy compared to lockfiles.