As an illustration, consider a system which has the following packages installed: php53-5.3.27 PHP Scripting Language php53-bz2-5.3.27 The bz2 shared extension for php php53-ctype-5.3.27 The ctype shared extension for php php53-curl-5.3.27_1 The curl shared extension for php php53-dom-5.3.27 The dom shared extension for php php53-exif-5.3.27 The exif shared extension for php php53-extensions-1.6 A "meta-port" to install PHP extensions php53-filter-5.3.27 The filter shared extension for php php53-gd-5.3.27 The gd shared extension for php php53-hash-5.3.27 The hash shared extension for php php53-iconv-5.3.27 The iconv shared extension for php php53-json-5.3.27 The json shared extension for php php53-ldap-5.3.27 The ldap shared extension for php php53-mbstring-5.3.27 The mbstring shared extension for php php53-mcrypt-5.3.27 The mcrypt shared extension for php php53-openssl-5.3.27_1 The openssl shared extension for php php53-pcntl-5.3.27 The pcntl shared extension for php php53-pdo-5.3.27 The pdo shared extension for php php53-pdo_sqlite-5.3.27 The pdo_sqlite shared extension for php php53-pgsql-5.3.27 The pgsql shared extension for php php53-posix-5.3.27 The posix shared extension for php php53-session-5.3.27 The session shared extension for php php53-simplexml-5.3.27 The simplexml shared extension for php php53-soap-5.3.27 The soap shared extension for php php53-sockets-5.3.27 The sockets shared extension for php php53-sqlite-5.3.27 The sqlite shared extension for php php53-sqlite3-5.3.27 The sqlite3 shared extension for php php53-tokenizer-5.3.27 The tokenizer shared extension for php php53-xml-5.3.27 The xml shared extension for php php53-xmlreader-5.3.27 The xmlreader shared extension for php php53-xmlwriter-5.3.27 The xmlwriter shared extension for php php53-zip-5.3.27 The zip shared extension for php php53-zlib-5.3.27 The zlib shared extension for php This was obviously a system installed some time ago, last upgraded when the current version of PHP was 5.3.27. Updating database digests format: 100% pkg: libxml2 has a missing dependency: pkg-config pkg: php53 has a missing dependency: pkg-config The following 1 packages will be affected (of 0 checked): New packages to be INSTALLED: php53-fileinfo: 5.3.29_3 The process will require 2 Mi B more space. done (0 conflicting) [1/1] Installing php53-fileinfo-5.3.29_3... [1/1] Extracting php53-fileinfo-5.3.29_3: 100% # pkg upgrade php53 Updating Free BSD repository catalogue... This means that new versions of popular packages arrive into the repositories shortly after they are released by the upstream project.
The current version of PHP is 5.3.29 and when I tried to install another PHP extension (which is a # pkg install php53-fileinfo Updating Free BSD repository catalogue... In case of PHP, the installed versions become out of sync with the freshest ones in the repos very fast, and currently the only possible way of upgrading PHP is to upgrade each and every extension separately - an operation which, because of the broken dependancy tracking, may install new binaries (, leaving it broken until manually and individually fixed.
When compared with the other prevalent method of software installation on Free BSD, compiling ports with the Ports Collection, using packages provides a simpler and faster alternative that works in many situations.
Packages, however, are not as flexible as ports because package installations cannot be customized—if you have the need to customize the compilation options of your software installations, use ports instead of packages.
Maybe the other BSDs will adopt it as time goes on, too.
Gradually, I've been using it less and less and now I feel I must describe why, in a hopefully productive and positive fashion. An operating system is useless without its applications, and the currently blessed binary package management system, the is seriously broken.
In August of 2012, however, the Free BSD ports team released the first version of the next generation package management tool: pkgng The old pkg_ toolset was getting a bit long in the tooth and didn't support a lot of the features that a modern package manager should have.
The pkgng toolset fixes all this, while adding some of its own awesome new features that no other package managers have.
Another thing I found: # /usr/sbin/pkg version -Rv L= Updating Free BSD repository catalogue... Not having packages track their original repositories -- ie. [y/N]: 7.4.4 [Free BSD] Installed packages to be REINSTALLED: tcl86-8.6.5_1 [Free BSD] (options changed) net-snmp-5.7.3_11 [Free BSD] (options changed) gdb-7.11.1 [Free BSD] (options changed) The operation will free 1 Mi B. The relevant code seems to be this: I am not sure that I understand the logic here.
replacing the customized packages with the default packages from the Free BSD repos -- just leads to user frustration. I think this documentation no longer reflects reality very well. Checking for upgrades (2 candidates): 100% Processing candidates (2 candidates): 100% The following 3 package(s) will be affected (of 0 checked): New packages to be INSTALLED: postgresql93-client: 9.3.13 [Free BSD] Installed packages to be REINSTALLED: php56-pdo_pgsql-5.6.22 [Free BSD] (direct dependency changed: postgresql93-client) collectd5-5.5.1_4 [Free BSD] (options changed) The process will require 9 Mi B more space. Why a remote package that matches the installed package is automatically disqualified?