 dělám, že můžu se dělávali, že když se vytvědnout si na předepraví na vešem generatí sotmého rámou na Fedora a a v Čišinu na dělávě. Prvního závodního děluji chybu, pádláklok Krivova a Honza Kolaarík. Mně je sr. Rostlá Bráček a měli vám, a jsme z dnftými. Protože představíte se třeba dnes dělává čeština, které se dělává. Máte dělává. Protože jsme všichni na samým pědě, co jsme třeba třeba dělává. D&F je pak package manager, který třeba třeba třeba třeba dělává čeština, a měžete se v tom, že se dělává na svět nejlepších levelů. Máte rpm, které se třeba dělává a všichni na svět nejlepších levelů. Máte dělává. Máte dělává. A dnes dělává. Máte dělává. Máte dělává. A dnes dělává. Máte dělává. Máte dělává. A dnes dělává. nějsou tutovačyváho světeřního sv urgently bylu. Přesného postoji to je o dnv. Proto začnáme nyní o dotuji svojeho dnv. Jdeme, či se dneští dneští dnv. A co je to dvoje dn? Tady máte struka originální dnf, takže to není dnf5. Můžete vidět, že je to velké komplikace. V mětě se je to velké box, který je dnf. A je to dnf, které je dnf povědět. Myslíš, že se to velmi vlastně zvukává. Protože to to bylo všetké věci, a to bylo věci s hlavními, ale to bylo hlavní také budou. Protože se to bylo věci hlavní a to bylo věci s nájem, aby představili dvět, takže můžete vidět, jak to bylo problém. které se pozdělali nějaké doblizitice. To nevěděli, že se to nevěděli. Některé bylo hodně vytvědětné, ale nevěděli... To nevěděli, že se to nevěděli. A když jste vidíte, když se je zpětný kit. To je dnfd1. microDNF. A to je všechno výjštěný tím, který je tím, který mám výštěný tím, které je to. A tím výštěný tím, které je to. Je to výštěný, které je to. DnF se zbou závodila, že se vysvědá hodinou. Je to hodinou, které je to. Ale je to tím, že se nevětá Python. it's not very suitable to use in containers when you want minimal installation. And that's where MicroDnF comes in. But MicroDnF on the other hand doesn't do everything that DNF can do. Also that's because they both use different parts of the library. So for example, when a change is done in DNF, it doesn't get automatically done in microDnF. Tudověj, jak se to potravit. A je to 2 plágynsky blíži se, a tu je nejlepší plígynska, c-plágynska a pěkně, v předkplex Fuji a to se v skupě. Můžete vzít nejproducí, ale jak se příjam byl byt ozvuk, It was very difficult to make improvements without breaking compatibility. So this is where DNF 5 comes in. Yay, now this is DNF 5 structure. And you can already see it's much more simple. This big box is just the library. Doesn't compose of different sub libraries that don't fit together very well. Vypadá se na plně, a je to pokaz. Už se je největné, co v tomto všechno je podležitá appy. Je to zvršené v zvršeně z vzážené a... ...je. Někte se, že se to vypadá... ...a dvěná výzutí, která se těch, když je výzutí... ...a pěkná těch, která se těch, která se těch, když je výzutí. Vypadá se, že se to vypadá, která se těch... ...výzutí, která se těch, když je výzutí. Vypadá Vypadá v sobě výjel je veliky, protože je to všechno veliké, že Vypadá výjel, ale je to jen zelo na výpad, protože je to než nám přijde v Pythoniu. Ale nezavřeď, ale Python mám vývědné výraty. Takže to potřeba vyvědnit vývědně. a to je všechno vyjel, protože všechno tých dříve vyskává výstře i takhle výstře, takže jedna dřívla je zvukat za všechno tých dříve. Přesně se jste hrozná, že jsou dve knovali na plágin. Ale to je kámo, protože tyto vlastně vyskává. Je to c++ plugins for the library a then there are plugins for the command line interface so for example adding a new command would be there while something that would alter the run of the whole DNF would be in the plugins for the library and it could be also used by the daemon. Current DNF plugins, if they will be compatible with DNF5? I believe not, yes. So they will need to be revertent, but we are reverting many of plugins. OK, I will hand over to Jada. OK, there is another question. Well, the question is whether CLI plugins use SWIC or whether they must be in c++ yet, they must be in c++. The reason is quite easy. If anyone will write an important plugin for your distribution in the Python, then you will depend on the Python and then you will lose one of the advantage of the whole spec. Therefore for us it is much more better to write or to help you to convert your Python plugin into c++ than to support Python interface for the command line plugins. I am sorry, let's wait for the question and answer section with other questions. Maybe it will be better to have it in the one place. Well, when we talk about improved API that we suppose our new library provides, what it means? We try to provide a better workforce, safer workforce. What it means that if you run things incorrectly with your new code, DNF5 should alert you, stop you and explicitly say you do things wrong. You should call it in a different order. Why this is important? We have experienced many reports from the users, like it doesn't work. The simple answer is you run things not according to the description in our one page and so on. Therefore the workflow was not guarding. Or even worse, no one reports anything and you think everything is working according to your settings. For example, you modify settings at the time when it makes no sense. But then every time when you ask what was the setting for the operation, you receive the new value that was not used for the operation. Therefore, that's why we have some locking mechanisms, for example, for the configurations. Of course, we also improved transaction reports. Formal DNF4 use or overly use logging. Therefore, if you have any problems, then look to the log. But your application is unable to handle such a report. Because parsing anything from the log, well, it's hopefully wrong from all sides. Therefore, if something will get incorrect with your request for the transaction, then there is a structuralized logger. And you can list it anytime and make a decision according to the log rather than to just depend on the written value from the transaction result. Well, what is also different? DNF itself has its own configuration, but if you use API, you will discover that many configurations, many API methods require parsing configuration directly to these methods. The reason is, as Paola presented, the difference between C and the Python path. Configuration is in the Python and the logic is in C. And it's not capable to pass the original structure defined in the Python. What it means? You need to pass less arguments. It's more transparent. Therefore, you cannot have a configuration and use different set of the values. Sometimes you can override it, but again it will be transparent. Therefore, you can get the original value that you use for the request. Well, with what we also did, we tried to listen to you to the community what you need. In pass, we closed many of your requests that we cannot do it right now. But with the design of the DNF5, we remember your use cases and tried to modify the design to be able to provide or to support additional use cases. It means that we try to use less hard-coded settings and values in our code and move these values, for example, for the transaction to the configuration. Additionally, well, doing the looking to your code to your projects, we discovered that, okay, you have some bundle of our code. Therefore, sometimes it makes sense to provide it as API. Then you don't need to, for example, parse arguments. It's like, I would like to behave like a DNF, but the API or the argument parser is not available. Okay, let's use the same logic like DNF does. And then our users will get the same touch with the DNF. The problem is that it's, again, code bundling. And we usually improve this code because we find some edge cases when original parser failed. But it's not updated at your site. It's hard-coded at your parser, at your application, and you have to maintain it. And usually it differs. There are, of course, many improvements in DNF 5. And let me just share a few, for example, performance improvements. For example, one of the sites is loading of the repository. With the DNF, you can see that it downloads the repository, and then it's somehow freeze, and then it's continued with another one. And that you cannot experience with the DNF 5. The trick is that we split downloading and processing metadata into two processes. That runs in parallel. It means that when you download the first repository, you directly started downloading the second repository, and the first metadata for the first repository gets processed by our sole work. This is not only improvement, but another thing, and very important thing, is that DNF 5 does not download filings by default. Filings are a really huge piece of the metadata, the biggest one. And DNF 5 is not downloading these things. It has two sites. Less downloads, less requirements for your hard drive, and infrastructure also is used much less. OK, downside is that in some cases, that I will be not available. It means that some packages, for example, require some strange files, for example Fedora. Guidelines, they do have a problem, because DNF 5 by default will not see these dependencies as satisfied, because the metadata that were used by DNF, they are simply not available for the DNF 5 in default. The good news is that if your downstream, if your third-party repository requires such a metadata, it's configurable. Therefore, it's not hardcoded. You see that you end up in need it, OK, then you will pay the price. But don't, we should not pay the price for this rare, or hopefully rare, use cases on all systems. Oh, additionally, I have a few examples of the performance improvements, and this is, let's say, the long improvements in our DNF stack, that, well, we improve according to the DNF, and of course, DNF 4 was much faster than DNF 2, and DNF 2 was much faster than DNF 1, and it is much faster than DM in many cases, especially for the transaction. And we continue with the same way, therefore, well, as you can see, well, even a repo query, if you ask for the multiple arguments, or if you run, for example, what requires for the repo query, or even even update with many arguments, there is a huge difference. But please take it as an example. There are many differences, and hopefully you will get satisfied with the result. And, well, let me move to our roadmap, because I think it's also important. Where we are? We are at the Federal 38. I will happen at the Federal 38. Micro-DNF was absolvited by DNF 5. You know, no one complains, and we have received not complains for this change. It means that if you install new containers, well, you will have a DNF 5 inside. Well, also, what happened? Well, of course, the Fedora, that's one important location. Fedora 38 was also a milestone for the DNF 5 project, because this is the first time when it appears in Fedora repositories. Well, upcoming release, Fedora 39, what happened? There is a huge change, because DNF 5 will absolvit DNF. What it means? By default, anyone will start by default using DNF 5. Also, this is the time where users, or users of the command line interface, it means other components, are supposed to work on the adoption of the DNF 5. It means if your app is using anything from the DNF, then, well, check, verify at this state before the release of the Fedora 39, that everything works with the default package manager in distribution, it means in DNF 5. If it doesn't, well, then please report it as soon as possible, because there is nothing like unresolvable problem. We are engineers. Resolving problems is our job, not creating a new one. But if you will not report to us what you need, then we cannot help you. Sorry, guys. The next release, Fedora 40. Fedora 40 is the time where we would like to absolute microDNF or remove microDNF from Fedora. We will set up the standard process. You know, that's absolute thing or retiring a package. It's the standard process of Fedora. And I'm using this channel just to share it with you, because it is important. Get ready. If you depend on something that it's not provided by DNF 5, please let us know. We are taking these requests as a priority. It means if any other software is blocked or adoption of the DNF 5 is somehow blocked, it's our priority. Well, I've heard several times why we are removing any functional software from our stack. And the answer is, I remember YAM. I remember when and in which state we removed YAM from our distribution. Well, it was removed at Fedora 31, and at that state it was completely broken. The problem is that if you will search on the Internet what to use with the Fedora or REL, often you will get a YAM. Therefore, you will install YAM, you try to use a YAM, and then you will get the phrasebacks. Yeah, because it was not functional, and that's what we want to avoid. Remove software before it gets broken from the distribution, because it macro DNA is not going to be supported by upstream. And the next stack, the next milestone is, of course, the removal of the DNF. DNF from the Fedora is the repository from the same reason. Therefore, if your application depends on DNF API or LibDNF or Hockey API, then during the Fedora lifecycle, that would be good if you will start or if you will finish adoption of DNF1. What's your risk? Standard process in Fedora when you remove the package is, well, you know, we are not going to support it, and well, what's adoption? You can take it, yeah? You can take it, you can start with support, but, you know, you have to support it. Yeah, that's the trick. Therefore, thank you very much, and I'm passing the mic. Do you hear me? Okay, so let's see the DNF5 in action. First, we have prepared some command line examples comparing the original DNF with the new DNF5 experience. So we have prepared, like, two separate containers, both with the same configuration, and on the left side I will show you the command using the original DNF, and on the right side I will run the same command using the new DNF5. So let's start with some common usage, like installing a package, for example, the gilipsy devil package, and the same one with the DNF5. And what's happening now is that, yeah, the DNF needs to fetch the metadata from remote repositories before being even able to tell that the given package is available. So we have in the system configured the links to remote repositories, and from there we are, like, downloading the metadata files about what are the packages available, what are their sizes, and what's the relationships between the packages. And we can see the first difference that Jarda was talking about when we look at the Federal 38 repository, there is, like, 34 megabytes on it for DNF5, while for the DNF there is, like, 83 megabytes of metadata on it. It's mainly because of that files are now not downloaded by default. And here we can see also the calculated transaction, or in other words, what's going to happen if a user confirms the installation. So DNF tries to find, like, the best available way how to install the package of the given name. And if it wouldn't be possible, it tries to provide the reasons why it is so. We can also see some differences in the output, like, we have some more information regarding the DNF5, there is, like, what is being replaced, and also the sizes here now refers to the installation sizes of the packages, while in the DNF it was the download size. Yeah, so we can just install the packages, and we can see that there are some connectivity issues, but, yes. So, yeah, there are some changes in the output, but hopefully for the better user experience now. So, when using the command line environment we don't probably want to type a lot, so in the DNF there was already some support for auto completion, for example, want to auto complete the mark command, we provide with some suggestions there, when we press the double tap, but if there is some sub command for the given command, we want to use, the DNF doesn't provide any suggestions, and instead it incorrectly provides already the, like, installed packages as the arguments for that. We can try the same thing for the DNF 5. You can see that the mark command is also completed, and also the sub commands are provided for the user, also with some brief description what each command is doing. So this is also hopefully for the better experience. And now let's try to compare how fast is querying the information about packages. So we will first run the most simple query command which is the DNF repo query which basically lists all the available packages from the connected repositories. So we can just run it for both commands. We could see that there was, like, a little bit fast for the DNF 5, but we can measure it precisely using the time command, so we can use the DNF repo query and also we will suppress the output so we will actually really measure the execution time on the command and the same one for the DNF 5. We should see there the improvement. There is, like, more than two seconds and less than one second for the DNF 5. We can also try something a little bit more complex, so list all the packages with what depends on libcoral library and the same thing for the DNF 5. And there the the difference should be more significant in this case. Yeah, there is, like, six seconds for the DNF 5 and there should be, like, more than three times slower for the DNF. Yes, it's like 18 seconds. OK, now let's try the same use case as I assumed before by installing a package but now using the DNF 5 API. So this is how a simple Python script installing some of your favorite package looks like but let's look at it step by step. So first we need to have installed the DNF bindings package for Python in order to simply import the libdnf5 library like this. Then we need to create a base object like the center point of the DNF and tell that we want to load the configuration file from the default system config file and apply it. Then we need to prepare a data about repositories. So we prepare a stack with the data about all connected and configure repositories from the system configuration file and then we will download the need in metadata and parse it into the objects. Now we have, like, everything prepared to tell the DNF what we want to do or what is our goal in the script and here it basically means installing a package of a given name. In this case it's the Nudoku package in the CLI environment. Then when we have the goal specified, we can resolve it meaning calculates the whole transaction what's going to be installed, removed or upgraded which is followed by downloading the needed packages from remote sources and then actually running the transaction which will perform all the needed actions in the system. These two actions here are separated because in some use cases we actually don't want to change the system and, for example, just download the packages. So now we can just run the script I will just show that there is no Nudoku command yet and I will just run the API script and it will simply hopefully maybe and yes it should be now installed and here we can play the Sudoku all day long in the CLI OK, nice OK, so now we are heading to the end of the presentation so I would like to briefly introduce our core team members that are participating in the DNF5 development so here Marek Bohá, David Cantrell Evan Goudy they are our presenters today Oliš Matěj, Jardam Ráček is our great tech lead Jaroslav Ruhel and Nikola Sela and I would like to also mention our QE team I think we have a nice and tight cooperation with them and they help us improve the CI stack and implement the API tests for the Python and now I would like to invite you to connect with us and collaborate on our projects our main interface is on the GitHub channel so we have their issues which we would like to invite you to discuss what things are bothering you and what you want to improve the pull requests the review process and also we want we try to make label all the things we think that are good for the new contributors with a good first issue label so watch out for these on the Kevin board you can see all the progress on the work items like what is being reviewed or what is working progress and the plans to be done soon in the to-do list and for general Q&A there is the discussion session also we are on the bugzilla which we watch this for the Fedora bugs so yeah and we try all the items from these channels regularly every week so we can provide the answer like the response to reporters quite soon ok so thank you well the question is that we turn off downloading file list by default but why did not we use file list from the primary is it correct? we do we do therefore everything is in primary we read if you require it means that if you require something from PTC from the configuration or if you require binary from user bin standard directory it's not from Fedora, yes, weird, yes everything will work like charm and you will see these file provides the question was when I run repository whether it downloads a file list in background well not yet but for example if you request file I mean install and any file DNF automatically downloads a file list therefore this already is present and I think we will extend for example if you want to list files and so on that there will be a logic but it will take a time to implement it everywhere oh I don't know who is there maybe it's bishek I'm sorry can you share the question you mean hardwife or RAM RAM well the question is well that there are some rumors that DNF5 is using more RAM memory than microDNF I think this is not true because microDNF by default download also file lists and the most requirements for the RAM is a file list before you process them therefore it means there should be a significant decrease in the default behavior of DNF5 in any operations but you cannot count on that I mean if a user will try for example install a file then it will download the file list and again it will require addition memory for processing these metadata well we have no other choice well the question is that there are some rumors that modules are going to disappear and the question is what's the plan for the DNF team well we have no other choice we have to support for the legacy reason or modularity use cases because it is expected that on one system you will be able to handle non modular staff therefore we have no other choice than to implement modularity like it was in DNF last more question ok well that's your answer well you can read the history in the fedora deva and you will find why well the question is why not rust the long answer rust wasn't an option at the time when we start with the development of DNF 5 and we have good reason why to not start short story, long story is on the fedora deva please read and thank you very much and please don't hesitate to ask questions after the session we will be happy to answer any of them