The disadvantage is very mild, and the advantage huge (modularity and ability to easily go embedded). If your dependency manager cannot express "program[+feature]", it is your dependency manager's problem.
* https://guide.macports.org/chunked/reference.variants.html
* https://guide.macports.org/chunked/using.variants.html
The default / most common variants have pre-built binaries that are downloaded via a port install, but if you specify something more 'obscure', things are built from source.
FreeBSD's Ports also allow for options:
* https://docs.freebsd.org/en/books/porters-handbook/#makefile...
Build-time and run-time dependencies are both handled.
If it existed, it would be a nightmare, because features are recursive, and you would end up with fragile monstrosities like
foo[+bar[+baz[+qux],+quux]]
of course, each variable having version numbers and all¹ https://devmanual.gentoo.org/general-concepts/dependencies/i...
² https://setuptools.readthedocs.io/en/latest/userguide/depend...