Why We Removed the "Free" Channel in Conda 4.7
Jul 03, 2019[email protected]
One of the changes we made in Conda 4.7 was the removal of a software collection called “free” from the default channel configuration. The “free” channel is our collection of packages prior to the switch in recipes/compilers that we did for the Anaconda Distribution 5.0 release. The current primary channel, “main,” is also totally free of charge. This is not a switch to charging for packages, only a switch from two potential pools of packages to just one. We removed the “free” channel from defaults for a number of reasons - all oriented towards providing you with a faster Conda experience.
First, Conda is fundamentally limited in speed by the number of packages that it must contend with. Fewer packages to consider directly translates to faster Conda. The “free” channel made up 42.8% of the ~31,000 available package files:
Second, the “free” channel contained packages whose metadata often caused problems. Part of what was introduced in the rebuilds for Anaconda Distribution 5 was an automated scheme for constraining libraries. That dramatically improved the quality of the constraints in the newer “main” channel. However, when those constraints excluded a solution, Conda was free to use packages from “free” that did not express constraints where they should have. This resulted in very long solve times (hours) and ultimately, broken environments. Removing the free channel was the only efficient way to exclude these broken constraints and avoid the associated problems.
Why are things breaking, though? Symptoms include environments that are no longer satisfiable, or packages that are missing. All of the software on the “main” channel was carefully bootstrapped so that it does not include any reference to the free channel, but software from third party channels, such as conda-forge, may not have undergone such careful filtering for content from the free channel. Packages that end up depending on content that was only available on the free channel are now unsatisfiable. These packages need to be rebuilt. The hard part is often not rebuilding them, but identifying where the exact dependency on the free channel is introduced. We’re working on improving Conda’s messaging to help people understand this.
In the meantime, you can still add the free channel back. We don’t recommend this unless you really need to, because it is slower, and you may run into binary incompatibilities. Nevertheless, there’s a setting:
conda config --set restore_free_channel true
The brokenness that can come from the free channel can be obvious (solves taking hours) or subtle (cryptic error messages about seemingly unrelated parts), but we hope this clarifies the situation and helps you get back on track if you’ve been affected by this change. Be sure to try to rectify the usage of free in your packages, rather than leaving this setting on.