# FreeBSD packages seem to pull in large amount of dependencies compared to Linux?



## zostj (Oct 19, 2022)

Hi guys,

I'm new to Freebsd. My prior experience was with Arch Linux. (I came for the stability of course).
However, having just installed some packages, I was really surprised by the unusually large amount of dependencies that some of these freebsd packages are pulling into my system. I will give two examples: lilypond, fcitx5-configtool. 

I'm using pkg (not ports): these are installed with:
pkg install fcitx5-configtool
pkg install lilypond

1. fcitx5-configtool 
https://archlinux.org/packages/community/x86_64/fcitx5-configtool/
https://www.freshports.org/textproc/fcitx5-configtool/
On Arch: (below are the dependencies and their dependencies)
fcitx5-qt  ----> qt5-base (dependency)
kitemviews  ---> qt5-base (dependency)
kwidgetsaddons  ---> qt5-base (dependency)
qt5-x11extras ---> qt5-base (dependency)
/everything else are just make dependencies that are used to build the package that will be deleted when the package is built, and optional packages that are not installed by default but available for the user to pick up later/

So on arch, fcitx5-configtool really only installs:
qt5-base, fcitx5-qt, kiteviews, kwidgetsaddons, qt5-x11extras (with qt5-base being the one to pull in majority of the libraries since it is required to run this qt tool)

On FreeBSD:
I ended up installing 98 packages that requires 399 MB of space and pulling in tons of KDE frameworks related stuff. Surprisingly, now I'm even a proud owner of pulseaudio because this was pulled in as well. (it's not even an audio application or a complicated big app - just a qt app for fcitx for configuration settings) 
In addition, things like kdeclarative, is listed as a *make* dependency on arch and was only used to build the package and does not remain as an installed package, but on FreeBSD, it's installed permanently as kf5-declarative. Same with some other packages that on arch are listed only as optional dependencies and are not installed by default.

Coming from linux, i know these are seemingly small packages, but on FreeBSD, they are pulling in so many dependencies that it's kind of scary.

2. lilypond
https://archlinux.org/packages/community/x86_64/lilypond/
https://www.freshports.org/print/lilypond/
pretty small on arch as well with not many dependencies.
on arch, texlive is only used as a *make* dependency for building the package and does not remain as an installed package. on FreeBSD texlive-texmf is installed as a runtime dependency, as well as a plethora of other packages that in the end requires about 3+ Gigs of space (mostly because of texlive).  

--------------------------------------------------------------------------------------------------------------------------------------------
I know this is probably just due to how different systems compartmentalize their packages and dependencies, but nonetheless, it's still pretty shocking that some of these small packages are pulling in such large dependencies on FreeBSD


----------



## Alain De Vos (Oct 19, 2022)

Compare the number of packages lilypond pulls in compared to the number of packages the KDE-desktop pulls in.
Or your available free disk space.
Numbers are relative.


----------



## zirias@ (Oct 19, 2022)

There are two possible aspects of this.

Errors may happen. Having something in `RUN_DEPENDS` (or `LIB_DEPENDS`) that's really only used at build time would be such an error. If you think this is the case for some port, please open a PR about it to get it fixed.
Complex software often has lots of optional dependencies needed for some subsets of features. For building binary packages, the maintainer of a port must decide for a "sane" set of default options. There's just no way to get this "right" for everyone. You'll always have some complaints about "unnecessary" dependencies and/or "missing" features of the package. General rule of thumb is to enable as many features as possible while trying to avoid "monster" dependencies. But if you're unhappy with many choices, build your own packages (e.g. using ports-mgmt/poudriere or ports-mgmt/poudriere-devel). Most ports allow to configure options at build time. If you use the -devel version of poudriere, you get the added benefit of being able to just fetch binary packages that aren't affected by your option changes and only build those you configure differently.


----------



## Alain De Vos (Oct 19, 2022)

A nice one is the following. What is the correct number of dependencies of ffmpeg ?





						FreshPorts -- multimedia/ffmpeg: Realtime audio/video encoder/converter and streaming server
					

FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec - the leading audio/video codec library.




					www.freshports.org


----------



## zostj (Oct 19, 2022)

fair points guys


----------



## astyle (Oct 19, 2022)

Alain De Vos said:


> A nice one is the following. What is the correct number of dependencies of ffmpeg ?
> 
> 
> 
> ...


To start: There's no such thing as "correct" number of dependencies for multimedia/ffmpeg... There's `BUILD_DEPENDS`, (or `LIB_DEPENDS`), and `RUN_DEPENDS`, that's kind of the minimum required to install multimedia/ffmpeg. After that - it's whatever you want to build ffmpeg with, up to a maximum that the FreeBSD Makefile will let you...

Also: Poudriere is a rather unwieldy monster. It only starts making sense AFTER one gets a handle on the basics of port compilation in /usr/ports/. Those basics are covered in the Handbook. From personal experience over the past few years, advice I can offer to the OP is: "You're gonna mess up to the point of needing to reinstall FreeBSD from ground up. Don't be afraid of that, it's a learning experience."


----------

