Hello Fedora,
It’s been a little while since my internship working with Fedora CommOps ended. My current work mainly centers around CHAOSS, where I’m involved in a great many things, but most notably the CollectOSS project. This project collects data from the public github API to help open source communities analyze things like the health of their upstreams and is the data source that powers 8Knot (public instance: https://eightknot.osci.io), a self-serve data visualization tool for various community insights surrounding contributors, issues, velocity, and many other forge-based metrics that are heavily based on the CHAOSS metrics.
I wanted to make a discussion post because I have run into a metadata shortcoming that I wanted to ask the community for help navigating (since I have virtually no experience as a Fedora Packager, short of some incidental messing around with COPR).
My proposal
Essentially, I would really like to find a way to link fedora packages to their canonical upstream URLs.
These URLs aren’t hard to find, and can often be found on a one-off or manual basis for a single repo. For example, take libvirt, whose specfile is here. I was able to find that the upstream URL is very likely to be libvirt / libvirt · GitLab with just a couple clicks using the URL already present in the specfile. Package maintainers also very likely already know what these urls are for their packages.
Issues
The issue is more that this data is not standardized and generally available, which causes several issues:
-
Different teams working on different things may need this same information, resorting to independently finding it for themselves - a highly inefficient setup
-
Putting automated tools at a disadvantage for being able to automatically find this information in bulk and act on it. This includes things like:
- tooling for detecting whether a CVE has already been fixed upstream
- tooling to proactively monitor the health of all the packages a particular system depends on (tracking the underlying health of a community like Xz before burnout can create more CVEs)
- fuzzers and tooling designed to search for bugs and vulnerabilities
- Tooling that montors for declared Licenses (potentially for compliance with Fedora policy or to catch license changes upstream sooner)
-
(im still working on gathering the various usecases and examples for this)
Benefits
In addition to the opposite of all of the above points, I think there some additional benefits to being able to link packages to their canonical upstreams:
- I think this would also be a small, but highly impactful way to help modernize fedora packages. Including a metadata field like this would help bridge the gap from RPM’s “the tarball is the gold standard” design not that the vast majority of packages are maintained in a git repository somewhere online
- This would enable tooling like CollectOSS to complement existing analysis with more social/people-oriented aspects of the community (contributors to issues/PRs, maintainer burnout/lottery factor, project velocity, etc), potentially enabling more proactive response to maintainer burnout or other potential threats (and maybe reducing potential sources of CVE/malware events in the first place)
- Better visibility for fedora teams (like CommOps/Fedora Data) when measuring progress towards Strategy 2028 goals
- expanded information in
dnfinfo/packagekit to reduce friction for people[1] to find where to report bugs and submit fixes
The PURL proposal
In discussing this witn @adamwill, I learned about F45 Change Proposal: Adopt PURL Metadata (system-wide) - #10 by cssushiman
Upon first glance, I think this is a promising proposal to standardize an identifier format in Fedora to make it easier to link output from CVE scanners and SBOM data to Fedora packages. This change sounds like a helpful idea on its own, but I think what I’m proposing here goes slightly further.
Where PURL enables the link from SBOM → fedora package, my suggestion here would link Fedora package → upstream forge (github repo, gitlab repo, forgejo repo, etc). This would make the chain of traceability even more complete and both proposals are mutually beneficial.
Why not use the RPM Specfile’s URL field?
This is often one of the first things people ask when soliciting feedback for this proposal.
While the RPM specfile does already have a URL field, its use is not especially standardized and is often uses simply as a link to the homepage/website for the project (example: firefox, “some xfce packages”)
In order for this field to be useful and useable to the community, especially for more automated tasks like helping process the flood of CVEs that are hitting just about every project, the data needs to be available and follow very clearly defined, consistent rules.
Positive example: Hummingbird
One of the things that got me started on this was the recent announcement of Project Hummingbird.
While not part of the RPM specfile, their RPMs repo has a metadata folder containing a JSON file for each package. This json file contains a field (upstream_repo) that clearly identifies the canonical upstream repository for that package. This field is required to be populated when new packages are added, and all hummingbird packages have this field.
This data being available makes Hummingbird a very attractive first usecase for the work my team does ( analyzing the health of the upstream communities).
Edge cases
Life is definitely messy and perfection is not something I am aiming for here. Based on some existing conversations I have had surrounding hummingbirds ~400 or so RPM packages, I have been warned of various edge cases, including:
- Upstreams that dont use a git repo (i.e. CVS, SVN)
- Upstreams that dont use version control (i.e. their upstream is a tarball URL)
- packages that have no “upstream” at all - they effectively are their own upstream. For example, fedora-release. (credit to adam’s comment)
I’d be open to discussion about edge cases like this (or others people know of). My initial thought is that I suspect these edge cases would be best to leave to those consuming the data (such as my team) since the way to handle each of these cases is likely to differ depending on what purpose you are using this upstream URL data for (i.e. security scanner vs community health metrics tooling). While I might log and skip non-git upstreams in our data analysis tooling (unless it becomes a significant number of repos), I suspect the same wont be true for a security scanner that promises 100% coverage.
Where I need help
This is mainly an initial idea that has come up in a lot of conversations in my little corner of the community that I believe can be useful to many, many other usecases as well.
I’m a little intimidated by the warnings on the documentation for the Fedora Change Proposal process, which is why I am posting this as a regular discussion post to refine the idea and gather support first.
I would be very interested to hear about:
- any feedback people have about this idea - any issues with the concept I outlined above?
- more usecases and reasons that not having this metadata is causing problems - I only know so much about what the whole Fedora ecosystem is doing
- help deciding what the best home for this metadata is in Fedora (RPM specfile? Sidecar JSON file? something else?)
- Help deciding how to proceed with this proposal. Is a Change Proposal the best venue for this?
- Help deciding how to implement this - Would the general process just look like me submitting one PR per package to include this metadata in fedora dist-git? Is that going to create an unnecessary burden on packagers, especially those who are maintaining several packages?
Thanks
Thanks to everyone who I’ve talked to so far about concepts relating to this proposal, including:
@mattdm
@cdolfi
@duffy
@adamwill
@kevin
It seems like more people seemingly feel empowered to try Linux and make their first contributions today than even before the pandemic. ↩︎

