Homebrew Options RemovedJanne Kemppainen |
Starting from Homebrew 2.0.0 options are no longer supported in the Homebrew/homebrew-core repository. The reason for these changes was to reduce the support burden on the maintainers as the formulae with options needed to be built from source and couldn't be tested on the CI system. Options will still be supported by third-party taps.
I was just recently bitten by this change at work. In my use case I needed to install Curl with the OpenSSL option to run Python unit tests for a project that depends on the
pycurl pip package with the
--with-openssl install option.
The old way was to add installation flags which would trigger building from source with the added options instead of installing pre-built binaries:
>> brew install curl --with-openssl
Now that the install options have been removed the proper way to install Curl with an OpenSSL backend is to use a separate formula that has been built with the required flags:
>> brew install curl-openssl
This is such a popular option that contradicts with the default values that they decided to support a separate formula.
Another porgram that we had problems with upgrading was
ffmpeg which we installed with quite many installation flags:
>> brew install --with-sdl2 --with-tools --with-webp --with-x265 --with-libvpx --with-fdk-aac ffmpeg
At the moment we are using the default installation:
>> brew install ffmpeg
I don't know why we had all of those options but so far I haven't noticed that anything break.
There are two implications from this change:
- Each combination of build flags needs its own formula
- If a formula with your desired options isn't available you need to maintain your own tap
If a formula with your preferred options is not available you'll need to provide it yourself, find some other unofficial source, or use some other way than Homebrew to install the software. This might touch only a small percentage of brew users but it will cause some head scratching for sure.
The homebrew Discourse page has a thread where this change has been discussed after it was already implemented. Overall, the tone of the maintainers doesn't feel too friendly.
While I appreciate all the volunteer effort behind Homebrew I think this change could've been communicated in a better way to the end users that depended on the install options. A deprecation warning would've gone a long way.
saagarjha pointed out that that adding a warning message when updating would've let people prepare for the change and give feedback if needed:
$ brew update moreutils 0.62 -> 0.63 ==> Upgrading moreutils Warning: Homebrew is planning on deprecating options soon. For more details, see https://github.com/Homebrew/homebrew-core/issues/31510.
He also wrote
I had no way of knowing that this was even being discussed, despite being in the group of people that would be directly affected by the change;
To which the dev's response was that “there is a public issue tracker”. I don't think it is reasonable to expect that a regular user should closely follow the bug tracker of a package management system.
Also, after reading some of the messages in the issue #31510 it seems that even some core developers were not aware of the situation before they already started removing the options.
It seems that the reasons to remove the options were:
- all combinations are not testable
- CI didn't test any options
- options were regularly broken, increasing the burden on maintainers
These are all valid reasons. If the workload became too large for the contributors to handle then this may have been needed to keep the project alive. And the majority of users won't be affected by this change.
Judging from the support questions such as this in the Homebrew community discussion board quite many were surprised by the change. These changes can be even more intimidating to people who are not software developers, don't know what pull requests are and how git works.
It was also interesting to read a comment from the original creator of Homebrew who wasn't particularly happy with the new approach as he had envisioned Homebrew as a flexible and useful tool. He also noted that over the years useful features have been taken away only to make maintenance easier, which he'd rather not have done. On the other hand he admits that as he is not actively working on the project anymore he is not in a position to criticize the current development.
So in short, the team behind Homebrew wanted to remove the options so that everything that the user installs has gone through the CI pipeline and is guaranteed to work. This also reduces their maintenance work on their end. Users wanting to use different options than those that come with the default installation should maintain their own tap or find a third party one.
Also, communication is hard.