MacPorts 2.3.0 has been released. But what’s new for users, and why should they use the new features?
This release contains a lot of changes under the hood that users probably won’t notice. For example, MacPorts no longer uses the system-provided version of Tcl, but ships its own copy. That might seem like a step backward at the first glance, but simplifies compatibility with older systems such as Tiger or Leopard (hello, PPC users), allows us to clean up some of the cruft in the codebase and fix some long-standing issues like signal handling in future releases.
Another change most users won’t notice is the use of HTTP pipelining (I know, I know, what took us so long?), which should be beneficial especially when downloading a lot of binary packages from our mirrors. Also related to downloads, but very much noticeable are the new progress bars. Previously download progress information was only available when run in verbose mode, but 2.3.0 comes with a nice progress indicator for downloads taking longer than a few seconds. You’ll also see the same progress bar in rev-upgrade, which previously indicated its progress using a simple percentage number.
One of the changes I’ve been waiting for (and working on) is “trace mode”. Trace mode is a poor man’s sandbox initially
developed for the darwinbuild project at Apple. It is based on library preloading, a technique known from
Linux systems using the environment variable
LD_PRELOAD. That makes it inherently insecure, but since
security (i.e. protection against malicious attackers) has never been a goal for this sandbox, that’s not critical.
Trace mode adjusts the environment of a build in MacPorts by hiding all files that shouldn’t be there in a vanilla
installation of OS X and files in the MacPorts prefix that aren’t installed by a dependency of the current port. Trace
mode is a great tool for both port authors and users: Missing dependencies are easily identified and files in
/usr/local can no longer interfere with a MacPorts build with trace mode enabled. This last point is
especially important since lots of third party installers and other package managers (looking at you, homebrew) install
/usr/local. The next time a port fails to build for you, clean and re-try with
Other minor, but helpful new features include a check for the presence of the Xcode Command Line Tools and Xcode license
agreement acceptance and a helpful new overview for the select feature at
port select --summary.