> every parent is just a human who is mostly winging it trying the best they can
This is an eye opening statement. Often as a kid, parents tend to look like gods and superheros because they are doing things which are impossible for us. As we age we tend to notice the shortcomings both from the current situation as they are ageing and from our child hood which we have better understanding now. Again, second order thinking helps a lot here I guess.
Maybe it's just my outlook - I sit in meetings with adults and have to remind myself that we are all just children in overgrown bodies. Sure, some will have had experiences that have taught empathy, communication, etc, but most of us are still prone to the occasional temper tantrum or emotional outburst. And that's ok. Rather than seeing it in a derogatory way, I think it helps us all stay humble and open minded toward each other. With my kids - they are at an age where they are starting to realize that I'm human, with foibles. Better to admit that and build trust that they should heed my advice anyway, as a more experienced human, than have them distrust out of spite that I'm the parent and they are the teen.
The above paths have the format of "/Programs/<PackageName>/<VersionNumber>/<TraditionalDirectory>/<FileName>". GoboLinux presumably scans every package directory and adds symbolic links to "/System/Index/<TraditionalDirectory>/<FileName>", like the following example (respectively):
The primary file locations make it easy to handle one package at a time, cleanly adding and removing entire packages. The indexed view makes it easy to find files (binaries, libraries, includes, man pages, etc.) by name without worrying about what packages they belong to.
Generally speaking, tagging can be half-simulated using hierarchies and (hard/soft) links. But a tag-based system would be cleaner and not prioritize one retrieval method over another. Here is an illustration of how I might rephrase GoboLinux's package storage and retrieval system in terms of tags:
Blob("... binary data of bash executable ..."), with hash = 9e19e455.
Blob("... binary data of ping executable ..."), with hash = 28224f5b.
Blob("... binary data of libpng.so library ..."), with hash = 6243c115.
Blob("... binary data of stdio.h C code ..."), with hash = d0335126.
Tag(packageName="Bash", version="4.4", target=9e19e455).
Tag(packageName="Netkit-Base", Version="0.17", target=28224f5b).
Tag(packageName="LibPNG", version="1.2.5", target=6243c115).
Tag(packageName="Glibc", version="2.24", target=d0335126).
Tag(traditionalDirectory="bin", fileName="bash", target=9e19e455).
Tag(traditionalDirectory="bin", fileName="ping", target=28224f5b).
Tag(traditionalDirectory="lib", fileName="libpng.so.3", target=6243c115).
Tag(traditionalDirectory="include", fileName="stdio.h", target=d0335126).
It is a pain to work with invoke now. It is all find and dandy for the basic features but you going to hit the seams soon you start trying advanced stuff. Looks like the project is going to be abandoned.