Submind YouTube summaries
Thumbnail for Flock 2026 Machine Readable Package Lifecycle Information In Repository Metadata

Flock 2026 Machine Readable Package Lifecycle Information In Repository Metadata

Watch on YouTube

Video summary

The primary challenge addressed in this presentation is ensuring that users remain aware of the lifecycle status of software packages, particularly regarding changes in support levels and security implications. Fred Live, a principal engineer at AWS working on Amazon Linux, highlights that relying solely on documentation or human memory is insufficient for making secure decisions over an operating system's lifetime. The core issue is distinguishing between packages that are simply stable and mature versus those that have officially reached end-of-life and no longer receive updates or security advisories. Without explicit data, it is impossible to infer a package's state without consulting release notes, which creates a significant gap in visibility for system administrators and security teams. To solve this, Amazon Linux has implemented a machine-readable metadata file known as `sport_info.xml` within its repositories. This XML-based format provides detailed, package-specific support information that defines various levels of support rather than just a binary supported/unsupported status. The data is generated at the time of distribution release and is owned by specific teams responsible for each package's lifecycle, ensuring that every released package carries this metadata as a requirement. This approach allows the system to handle complex scenarios such as multiple kernels with different lifetimes, multiple runtime versions like PHP, and packages from different repositories (e.g., EPEL vs. core) that may have distinct support timelines. The information is designed to be consumed programmatically by security scanners and compliance tools, enabling automated verification of whether all installed packages meet security obligations before the broader distribution reaches end-of-life. The presentation also details the integration of this data into the DNF package manager through a new plugin called `dnf sport-info`. This tool allows system operators to query the support status of specific packages, list their lifecycle phases, and filter packages based on their support state or end-of-support dates. While the current implementation uses XML due to its expressiveness and native support in DNF for schema validation, there are ongoing efforts to optimize the file size by potentially introducing wildcards or default lifecycle definitions per package origin. The ultimate goal is to enable system operators to define policies that block the installation of packages nearing end-of-support, thereby preventing the deployment of vulnerable software. Additionally, the speaker notes that while this solution is currently specific to Amazon Linux due to its long-term support model and commercial nature, similar concepts are being discussed for other distributions like Fedora and CentOS to better handle unresponsive upstream maintainers and shorter release cycles.
Read the full video transcript
So my name is Fred Live. I'm a principal engineer at AWS working on the Amazon Linux product and today I'm going to be talking about machine readable package life cycle data. So the problem we're trying to solve here is how do we make users aware of like the package life cycle? How do we make them aware of changes to the support status of software that they are that they are running? And this is very much a communication issue, right? If we establish that like not all humans read documentation and not all humans are able to remember documentation especially when they are running no that has a multiple lives of uh of support multiple years of support as opposed to like a few months like the favorite federal version. Uh how do we make sure that they can make security like safe decisions throughout the lifetime of the OS and that they know what they are getting into. And when you look at the when you look at the list of installed packages on the distribution or when you have a Linux box and you look at the packages that you have installed, there's very very little difference between a package that is enough live that is not getting support anymore from a package that is just not getting updates because it's so stable and so mature right there's what information do we have available right to make kind of secure decisions in those context right we have is the package in my repository and do I have security advisories or bug fixes advisories for this package. But in the absence of data, right, I cannot infer the state of a package unless I go and refer back to my release notes. So this is the problem that we are trying to solve here. And so before I go further because this was made for Amazon Linux and I know that like from talking to folks here this weekend uh not everybody is aware of what Amazon Linux is and how it differs from other distros. I want to make sure that we have we share the same context on like why this came to life and why some of the design decisions uh were made in this project. So Amazon Linux is all the AWS like Linux distribution that we use to run our own services. It's also widely used by a lot of customers running on EC2 or using other uh AWS services. Uh we offer a stable base that's supported for five years. Uh I say stable, I avoid like LTS or I avoid talking about EBIS because we do update packages. We update package versions but some packages we will just not touch for five years. We backward patches and we make those decision based on on each each package. uh we offer multiple kernels and that's where we're starting to get into territory where we need to talk about life cycle. So we ship multiple kernels each of those kernels sped for four years. So if you're really good at math you're already seeing that small kernels have a lifetime that is less than the operating system. Um so customers who start running Linux today or we start with a new version they are going to have to update kernel at some point or kernels are name spaced. Um, so they need to they won't get the update to like just a DNF update. They have to specifically go from one version of the package to another version. And we also do the same mechanis mechanism for multiple like many runtimes language runtimes on ML. We tend to offer multiple versions of the same runtimes. We have customers who want to run uh PHP got to help them. uh they um they want to run the latest versions but they don't want to take a breaking change when they go from one version to the next and so they want to control the velocity at which they are changing from one version to the next and on my part I don't want to backport patches to five different versions of PHP so the deal we're making here is I'm going to give you multiple versions of PHP but I want you to get off of the old versions before they are in supported by the upstream motors and well Amal Linux is is validated if you care about those things. So what it is that we want to know uh uh about the state of our packages as we as we run or as we operate all the distributions. Uh I want I'd like to know if my packages my packages currently supported, right? Do all packages I have installed on my box or do they are they all currently supported? Do they all have the same level of support? Right? Are they receiving are they receiving all fixes or are they only receiving a subset of fixes? Uh and will when will the sport status change like next right can I expect can I expect to keep running them for the next two years? they have a six month six month runtime on them and so on and from the perspective of the distro right we we we so for Linux and because we offer multiple version of the same packages we wanted this information to be like specific to each package and the way that we apply it to the dist at large is that the support status of the distro is the sum of the support status of all of its packages right when our distro goes end of life right it has it means that from our point of view every package just reach its end of life and nothing is supported anymore. So we don't differentiate between the sport status of the package and the sport status of the distro. It's a bit of an attempt to make this thing generic and um I want to know do all packages have a kind of consistent support life cycle uh in my distribution and this on some distros it's kind of a given on Amazon unit it's not uh we may also be running multiple repositories and different repositories could have also different level of support um into them built into And so why is it important to have this information like readily available? It's a compliance problem, right? So for customers who run distributions that are supported for a long time, right? It's important to know like it's important to be able to know are my packages supported, but also how can I prove it, right? How can I how can I demonstrate like programmatically that my that the packages are supported? How can a security scanner run and confirm to me that all of those packages are fully supported and that I can meet my compliance obligations and that I can make my security vendors and my auditors and my security people super happy about the way I operate my systems. Um I may want to end like packages support for packages before the end of support of the dro like we talked about the kernel a few moments ago. Um like we as a current as we like I want the to have the confidence to be able to release a package and know that I can let customers know that this package support is going to end at the point in time that is ahead of the DRO and they will not be able to find this information without going through like release notes and release note for point releases like what we have been doing previously we've put out release note and say so this package will become unsupported or will be deprecated two releases from now and now like you have You have to keep that in mind, right? And security vendors and scanner vendors have to build this into their product if they wish us to. So, it's really hard to have kind of a consistency in the experience and all of trying to kind of defeat the fact that the system is built on like humans being able to like kind of remember this information through their day-to-day cognitive load. Um, and things happen, right, as well. We may want to push out the end of support of our product. I may have released this Python version on that date thinking it's going to be supported until this other imaginary date. I may want I have customers using it. I don't want to break them. I may decide I will keep supporting them. So I need a way to communicate that uh to them and I need a way to communicate in a way that they can it can be verified. um security event happen right we've saw a lot of like we if people remember like lo for a few years ago if I'm I have a list running for many years like we support Linux for five years four years in right we may have a really hard time supporting some of those packages right the upstream maintainers might have moved on my packages might have been abandoned like years ago we've been backporting patches they are breaking changes protocol changes right So, how do we get customers off without just telling them about it? And prior to having those systems, we'll put out uh put out blog posts, put out announcement, put out like release notes. We never know, we can never approve, right? Our customers reading this, our customers changing their behavior based on this information that we are broadcasting to them. And I like to ask like product managers, can you prove to me that anyone has read this announcement we've made? And I've been charging them for that for years and nobody has ever been able to get back to me with an answer. So our solution to this is the the sport info.xml file. Uh it's a machine readable and version file format that we have added to the mat Linux repository. Um this was added a couple of months ago. Prior to that we experimented with this system like over many years. We have had a few iteration of a similar system. Um it offers it offers like package specific and repository specific uh support information. It it define like support levels for each of the packages and it's specific to each repositories as well. We use it to generate human available information questions. >> Y XML >> that's it. >> Is that mean? I'm sorry. >> No, it's okay. I'm I'm not a fan. I'm not a huge fan of of XML. We want the package manager to use this. And so we know that the package manager already has to understand XML. We have all the libraries all the libraries installed. It's a it's a very expressive format. It's very verbose. It can it's it's hard for a human to like write and read, but it's very easy to like uh for a machine to like write it, generate it and validate that what we have generated like matches the expectation. So easy to verify and it's it it's really good at kind of expressing complex information. >> I would have loved to use the ML for this. It's just like it's it's a very large file and we want like we need a way to make sure that whatever we generated like matches the schema and XML is very well suited for this. And I like to know that like DNF supports XML natively. So I know I have the libraries available everywhere I want to use this. Um yeah so we use it to generate the human readable information. So we know that we have consistent data across the online documentation and the the machine readable information. And we've tried to make this extensible to other distro. So we try to keep it as generic uh generic as possible if anyone like is inclined to try something like this. And we've also tried to make it extensible to multiple dimensions of support level. So we've been like for the last few minutes we've been talking about like the support level from the perspective of security right how do we are we patching are we patching all CVS are we patching only important are we patching only critical and many distri do that for like extended support and so on but they are as distenders like we make other decisions based on packages right and sometime we assume that customers kind of can read our mind and know like what we have how we think through packages and some packages in the distros Those are are made available strictly for our own use, right? We we carry those packages because we need them to build the environment. We we need them to we need some libraries to operate the package manager for example. But do we do we support every arbitrary use cases of those packages and as those packages ages right sometime we make secret decisions like four years down the road maybe we're going to evaluate this library and we're going to look so how it is used by the OS versus how it's used by the or it could be used by arbitrary customers so how will we communicate to those users that they might not want to be using this package or that we are we are like doing different type of evaluation different type of security decision for this package. >> Is that in a graphical user interface or is it just in XML and people have to know when things are going in, you know, going to go out of the support and stuff. >> Uh on the next slide or two slides from now, we're going to talk about the DNF plug-in. So there's a CLI, no graphical interface, but there's a graphical interface for geeks that's uh that's available and also it's XML. We can build other tools. uh we display this information since we generate the human vable information like online we have the you can on the Amazon website you can find information about each of the packages and all of the life cycle that is made from this uh this data but we really made this with scanner vendors in mind and security vendors in mind like our end goal would be like if you're running Nessus or if you're running other security scanners can you get notified by your tool and so it's not so much for human consumption Mhm. >> It lives in Amazon repositories. You can find it. Sorry, can't see my screen anymore. You you can find it on the on our CDN that we use for our our containers. This is available to anywhere anywhere in the world. So, this is not restricted to the AWS infrastructure. U you might notice it sits a little bit outside of the repository. It's not in the repo data itself. Uh but because Amazon Linux has a kind of a different repo structure than other industrials and because we do determistic updates, we carry some repo metadata outside of the repository itself. any one could make the decision to just put it into report. >> Sorry. How does the information get populated? Like >> Oh, thank you. Thank you. >> Thank you. >> How how does the the the the the deprecation data get populated? Where do you get that data from? Is it do humans put it in? Do you scrape it from a location? So the >> I skipped ahead here. I will have to go back. But uh we we pre-generate like we generate the original data at the time when we launch when we launch the DRO. And so our beta assumption is that we support every package we put in the dro is going to be supported until the end of life of the DRO. And then there are exceptions or the way that we Linux is a commercial product, right? We have we have teams and people working on it. those teams own packages like and that model is somewhat similar to to Federa Sigs in a way and we have each package has a has a very specific owner and every owner is responsible for the life cycle data for the package and because we integrate this into our release tooling the package doesn't get released if it doesn't have life cycle information uh attached to it so it's kind of a requirement >> thank So the way that we think about the life cycle of a package right they can have it's not just binary it's not just supported and unsupported there can be different level of support they can be unlimited level of support right you can have excellent support very excited support very very excited support and so on uh and most of those stage and you know the the most basic way to use this is to we map those stages to severity of CVS or severity of bug fix pixels that will be that will be addressed in that specific stage. And the way we structure it that we basically the file carries a list of packages. Each packages is attached to a life cycle and each life cycle has a list of phases um that are pretty fine. Um we we have the concept of a package origin because in the case of Amazon Linux we can ship multi the same package in different repositories and it can have a different life cycle in different repositories. So we have our ESPAL repositories which are very similar to EPAL and we have customers sometime will ask us to pro to promote a package from ESPAL to the core repos where it gets a higher level of support and so if we do that we need to be able to assess on the instance do we have the original version from ESPAL that's installed that has a limited support and maybe unsupported at this point or do we have the version from core is still supported and so we identify the origin of a package based on the like the the repo ID and the send the true identifier signing key and vendor and we do kind of a greedy match on those to determine what we have on the instance. You can find the code on uh on GitHub. Uh this is very fresh. This was pushed this morning. Um it's this reference Python Python library Python module that reads the file expose an API to uh to make run queries uh against the data. Uh it's also what we use to validate the file against the XML schema. Uh it's used by our DNF support and full plugin and we support the legacy and the V1.0 format and you might be wondering was published this morning why do you have already a legacy format? We've been experimenting with this for years. Uh so when we did release the L203 in 2023 uh it came with a different sport info file that was sitting on the instance and not in the repositories. uh it has a kind of a binary state of supported unsupported uh information is a little bit less rich and so what we published uh this week is a is is uh kind of the evolution of this system and based on the learning that we've made in in using this we've also been using this for years to um operate internal infrastructure at Amazon um we use this internally to be able to to determine to scan that every instances are no instances are running package that we have flagged as end of for end of support. Um, we also have made available a plugin for DNF4. It's the sport info plugin. Um, so it adds a sport info node to the DNF command line allowing you to like query data for a specific package for a list of packages or just to filter packages based on their their sport the sport state or the end of support dates. Um, it's also available on GitHub. This one is in the development tree. So the version we run this isn't released in our repositories yet. Uh we still use the legacy an older version of the NF plugin in our in Amazon 2023 and some sample output of what it looks like. If you query for a single package um like you get the status of the the package. This one is currently supported or was supported when I run this command. Uh you get the end of support date of this one as the lifetime of the this tool. till 2028 and we're currently fixing everything for this. So there's still our sending works to to keep this going. Uh we're hoping to kind of compress the size of the the format the size of the format a little bit right now because we carry an entry for every single RPM in the DRO. It can get can get pretty large. Uh so we're considering maybe making kind of default life cycle per package origin or supporting wild cards uh for the matching packages. Um we want to enable system operators to block installation of un unsupported packages in the package manager. I would very much like to like for all users to be able to define policies where on my fleet I don't want anyone to be able to install a package that goes support within six months. And we should look at the other five sport as well. So this is about it. Any any question? Is that interesting? Oh yes, question. I love questions. >> Uh is this plugin and tooling to produce this XML file available in Fedora main? >> No. And when will be? >> Oh, >> it can be. I I >> can I ask please? >> It's not It's not something I have considered, but during your question, it's probably something I should have considered. Yeah, we look we look into this. I guess similarly are there asks from Fedora that that from parts of this that you feel would make more sense in Fedora? I think uh I think in in with RA we're looking at something similar. I don't know all the details but I think being being uh discussed. So it' be interesting to know which parts make sense in Fedora from your experience. I think the the life cycle of Federa being so much shorter, right? I think this is this is less of a problem uh the way that Federra runs it infrastructure as well. The way that like repos get moved after a while like you you don't like a user who have been would have been running like Federra 8, right? Would have had to change its repo URL between then and now in order to keep using them. While in our case we we want to let our customers keep running old ancient version of Linux if they choose to do so because they control the six environment of because they have access and this is safe for them to do it. Um so we have a bit of a kind of different different constraint. Um I could I think I I will see the value and like the the end of support of Federa is almost deterministic right but it's very much relative to the next version the next two version Russian that get released so I think I will see some value there if we we could like programmatic programmatically flag that like this thing is done and you need to move on from it. Um, so yeah, I think we I will look into I will look into what it takes to to bring it into into >> Federa. Yeah. Uh how do you deal with the unresponsive maintainers? like can you just then switch the uns to unsupported and because if there is something critical on the package and you want it to be fixed like for example you propose the pull request but they don't respond they don't review they don't merge it can you do something about it with this XML >> you should present because this is a much better answer than the one I gave to the previous question like yes I think that's that would be a good way to use is into Feder from my point of view for Amazon Linux like I'm always on the hook for every packages even if like nobody is maintaining them on stream anymore from the point of view of Federal I think that would be an interesting interesting use case >> I'm just repeating this on Mike that uh I mean maybe asking a question have you tried to propose any of these kind of things against the DNF upstream team >> not yet. >> Comment in that same direction is is like if we were going to get it into onto the CentOS where that might might be more helpful. It would be necessary for us to have it in Fedora first. >> Okay. If anyone like to follow up on those questions, if anyone here is involved in like DNF, lib DNF like lib repo and so on as an interested to this, I will be happy to talk to you. Okay. Well, thank you everyone. I appreciate you coming over here.