为什么 openSUSE 很多软件包之间有循环依赖?

我最近跑了一些包依赖之间的分析,我本来以为包的依赖关系会是一个有向无环图(DAG),但是实际上并不是。

比如我发现 terminfo-base 和 libncurses6 之间有循环依赖:

$ rpm -q --requires terminfo-base | grep ncurses
ncurses >= 6.5.20240713

$ rpm -q --requires libncurses6|grep terminfo
terminfo-base

以及 sonnet 和 libKF5SonnetCore5

$ rpm -q --requires sonnet
libKF5SonnetCore.so.5()(64bit)
$ rpm -q --requires libKF5SonnetCore5
sonnet >= 5.116.0 

这种循环依赖正常吗?是不是应该把这种循环依赖的包合并?