Bundler 2 narrows runtime support while preserving Gemfiles
Bundler's new major-version policy follows Ruby's maintenance boundaries. The announced Bundler 2 changes drop obsolete runtimes and RubyGems versions and move errors to standard error while retaining existing Gemfile behavior.
A dependency manager can preserve application compatibility while changing which interpreters can run the manager itself. Bundler's new major-version policy makes that distinction explicit. The announced Bundler 2 changes concentrate on ending support for obsolete Ruby and RubyGems versions, with an additional change to the output stream used for errors.
Colby Swandale and André Arko's November 4 update on Bundler 2 describes a deliberately limited transition from Bundler 1.17. Existing applications and Gemfiles are intended to continue working. Users on unsupported Ruby or RubyGems versions cannot make the same upgrade.
That is the useful scope of the announcement. It describes the compatibility policy and the bounded changes planned for the major release. It also says that a system for using multiple major versions side by side has been developed, while leaving its mechanics for another explanation.
I find Ruby more approachable than Perl for larger object-oriented programs, but maintaining an interpreter remains separate from appreciating its syntax. A tool that supports versions indefinitely accumulates work unrelated to current application needs. Bundler's proposal connects that support burden to the versions Ruby itself maintains.
Support work needs an endpoint
The maintainers describe support for very old Ruby and RubyGems versions as a burden on Bundler's team. They also identify it as an obstacle to ruby-core accepting Bundler into Ruby itself. Integrating the tool with the interpreter requires compatible expectations about what each project can maintain.
The policy follows Ruby's maintenance pattern. The announcement describes resources for a current release and a previous release, with security work for the next oldest. Bundler plans a new version each year that drops support for Ruby versions no longer maintained by the Ruby project.
Ruby's June notice about the end of 2.2 support provides a concrete boundary. It says all Ruby 2.2 support ended on March 31. Bug fixes and security corrections would no longer be backported, and no further 2.2 patch release was planned.
That notice distinguishes normal maintenance from security maintenance. At its publication, Ruby 2.5 and 2.4 receive ordinary bug fixes and security work, while Ruby 2.3 receives security fixes only. Ruby 2.2 has passed beyond both phases.
Bundler's policy therefore follows an existing lifecycle rather than inventing a perpetual compatibility promise of its own. The interpreter's status becomes relevant to the dependency manager's next supported set. This gives application owners a more predictable reason for a future tool upgrade to require an interpreter upgrade.
Gemfile compatibility and runtime eligibility differ
The announcement's exhaustive change list drops Ruby 1.8.7 through 2.2 and RubyGems 1.3.6 through 2.5. Those ranges concern the environment executing Bundler. They do not describe a new syntax requirement in every application's Gemfile.
The maintainers explicitly promise that applications and Gemfiles working with Bundler 1 continue to work with Bundler 2. That promise still requires a supported execution environment. A compatible Gemfile cannot make an obsolete interpreter eligible to run the new manager.
This distinction prevents two opposite misunderstandings. A major version does not necessarily require rewriting an application's dependency declaration. At the same time, an unchanged declaration does not establish that the application's current Ruby installation can use the new tool.
An upgrade decision can therefore have separate answers. The project's Gemfile may remain valid while its interpreter or RubyGems installation needs replacement. The policy makes those prerequisites part of the transition instead of allowing them to appear as unexplained installation failures.
The article does not provide the detailed selection mechanism for side-by-side major versions. Its assertion that the mechanism exists is useful context, but it is insufficient to infer commands, lockfile rules or automatic switching behavior. Those details should come from the separate documentation the maintainers say they will provide.
Standard error is a workflow change
The remaining announced change moves error messages from standard output to standard error. That is small in implementation scope but observable to scripts that capture or redirect the command's output. A consumer relying on errors appearing in the standard-output stream will see different behavior.
This is why the release can preserve Gemfile interpretation and still count as a breaking change. Compatibility includes the command's interface to surrounding automation. A human reading a terminal may see much the same message, while a script processing one stream receives different data.
The bounded change list makes that effect assessable. It gives users a concrete output behavior to examine instead of asking them to interpret a major-version number as an unspecified rewrite. The announcement describes compatibility work in terms of observable contracts.
My preference is for that kind of release explanation. The question is which assumption changes for the application or its automation. Here the announced assumptions concern runtime eligibility and where an error is written, while existing Gemfiles retain their stated compatibility.
Maintenance promises have different strengths
The team plans bug fixes for earlier major versions and says it will try to issue security releases for the previous two majors when needed. The wording matters. A plan to attempt security backports is not the same as a guarantee that every old version remains fully maintained.
For Bundler 1.17 specifically, the announcement gives an expected bug-fix period of about a year and links its end to the release of Bundler 3. It also proposes a one-year deprecation-warning period for future breaking changes. These are published intentions as of this announcement, not a history of releases that have already occurred.
That policy gives a project remaining on Bundler 1 a transition period without promising indefinite support. It also gives maintainers a route to remove compatibility work when the corresponding runtime has already lost upstream maintenance.
The substantive direction is a smaller supported runtime set with a controlled application transition. Gemfiles retain the compatibility promised in the announcement, supported interpreters can adopt the new major version, and automation needs to account for errors moving to standard error. Future changes are intended to arrive with a published deprecation period.