mmozeiko
I'm not talking how it should be. Or which are good and which are bad libraries. That's not my point.
I was replying to this:
it seems that for any opensource library to be used, it can't depend on other libraries.
There are a bunch of open-source libraries used that depend on other libraries.
I think if you buy into the notion of a library 'solving' a certain problem once-and-for-all, interdependence is inevitable. But there are other ways of looking at it.
Look at the problem of video playback, for example. You need to be able to connect to a server and download the video stream or load the file from the filesystem. You need to parse the video stream into a raw feed. You need to decode the feed to individual frames. Then you need to display those frames on the screen with the right timing.
All of those things could be individual libraries. And there probably are. And all of them need to be able to communicate with each other. If you assume there will only ever be one library that does each piece of that, then there's no reason not to just have each other part of the pipeline call directly to the parts before and after it using the respective APIs. Technically each one could stand alone but because you assume that the other parts are static, you introduce cross-dependency.
But there's another way of looking at it. Each piece of that could be considered a 'service' of sorts, that produces and consumes a stream. The filesystem loader outputs an encoded video stream. The video decoder takes in an encoded video stream and produces a raw image stream. The display piece takes a raw image screen and puts it on screen.
However in order for that vision to work, there needs to be a common way to communicate so that they don't each need each others' API. The GStreamer library is one solution to this problem. It provides a framework for video streaming plugins to communicate with each other, and as long as every plugin is developed to work with gstreamer, it can tell gstreamer what kind of video it produces and what kind it consumes.
But that requires everyone to agree, and makes the common point a common dependency. If this was part of the operating system, that wouldn't be an issue. But none of the operating systems provides this service. Perhaps future operating systems should?
In any case, most problems are not solved in a single way, and often have interconnections with other problems or systems. So I think it's unrealistic to say a library should never depend on another library. But there are ways to mitigate dependence, and make it manageable.