Thoughts on macOS Package Managers
Disclaimer: I&#x27;m a MacPorts committer.<p>&gt; MacPorts almost always builds packages from source<p>Many packages in MacPorts (including LLVM) have pre-built binaries available from <a href="https:&#x2F;&#x2F;packages.macports.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;packages.macports.org&#x2F;</a> and its mirrors for macOS releases ranging from Mac OS X 10.5 to macOS 10.14.<p>But if a port is considered not distributable because of its restrictive license or license conflicts with dependencies, binaries will not be uploaded to our official mirror so users have to build it from source. We don&#x27;t provide official binaries for non-default variants or alternative prefix (the default is &#x2F;opt&#x2F;local) either, but organizations using MacPorts can set up private mirrors with custom ports and binaries.<p>port_binary_distributable.tcl[1] describes the license conflicts. e.g. &quot;git&quot; is not distributable because its license &quot;gpl&quot; conflicts with license &quot;OpenSSL&quot; of dependency &quot;openssl&quot;.<p>&gt; MacPorts seems to be a bit lacking in manpower (which makes things takes slightly longer than I would have expected)<p>Yes, we need more contributors and committers to maintain the large collection of ports we have. Our ports are more often outdated than Homebrew because of this and our maintainer policy. We are also seeking for ways to improve our developer experience, e.g. <a href="https:&#x2F;&#x2F;github.com&#x2F;macports&#x2F;macports-base&#x2F;pull&#x2F;120" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;macports&#x2F;macports-base&#x2F;pull&#x2F;120</a> which automates updating checksums in the Portfile.<p>&gt; The lack of color, as well as somewhat more cluttered and less relevant output, makes it a bit less pleasant to work with.<p>We talked about this in a meeting last year, but it hasn&#x27;t been implemented yet. <a href="https:&#x2F;&#x2F;trac.macports.org&#x2F;wiki&#x2F;Meetings&#x2F;MacPortsMeeting2018&#x2F;UserExperience" rel="nofollow">https:&#x2F;&#x2F;trac.macports.org&#x2F;wiki&#x2F;Meetings&#x2F;MacPortsMeeting2018&#x2F;...</a><p>Development of the port command is relatively inactive (severe lack of manpower). <a href="https:&#x2F;&#x2F;github.com&#x2F;macports&#x2F;macports-base&#x2F;commits&#x2F;master" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;macports&#x2F;macports-base&#x2F;commits&#x2F;master</a><p>&gt; MacPorts will set up its own tools in isolation from those provided by the system<p>Its own versions of libraries, to be exact. See <a href="https:&#x2F;&#x2F;trac.macports.org&#x2F;wiki&#x2F;FAQ#syslibs" rel="nofollow">https:&#x2F;&#x2F;trac.macports.org&#x2F;wiki&#x2F;FAQ#syslibs</a> for more background on this.<p>&gt; builds run in “sandboxes” under the macports user, where attempts to access files outside of the build directory–which includes system tools–are intercepted and blocked<p>It will block writing files outside of directories specified in portsandbox.tcl[2], but using (reading and executing) system tools is allowed. For example, most ports are built with the compiler from Xcode.<p>&gt; The upside is that this approach is significantly more contained, which makes it easier to manage and more likely to continue working as macOS changes under it.<p>Yes, but we recommend users upgrading to a new major release of macOS reinstall MacPorts and all ports because things could still break. We have a migration guide here: <a href="https:&#x2F;&#x2F;trac.macports.org&#x2F;wiki&#x2F;Migration" rel="nofollow">https:&#x2F;&#x2F;trac.macports.org&#x2F;wiki&#x2F;Migration</a>.<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;macports&#x2F;macports-infrastructure&#x2F;blob&#x2F;master&#x2F;jobs&#x2F;port_binary_distributable.tcl" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;macports&#x2F;macports-infrastructure&#x2F;blob&#x2F;mas...</a><p>[2] <a href="https:&#x2F;&#x2F;github.com&#x2F;macports&#x2F;macports-base&#x2F;blob&#x2F;master&#x2F;src&#x2F;port1.0&#x2F;portsandbox.tcl" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;macports&#x2F;macports-base&#x2F;blob&#x2F;master&#x2F;src&#x2F;po...</a>