Alire: Ada Has a Package Manager
Chouteau, Fabien
Rodat, Pierre-Marie de
Mosteo, Alejandro
Alire (Ada LIbrary REpository) is a package manager project for the Ada/SPARK community. The goal of a package manager is to facilitate collaboration within the community and to lower the barrier of entry for beginners. In this talk we will present the Alire project, what it can do for you and how you can contribute and give more visibility to your Ada/SPARK projects. We will also provide a tutorial to show how to use Alire to create a library and then publish it for others to use.
 Okay, so thank you everybody. Thank you for the presentation. So I'm going to talk first a bit about a liar. That means a library repository. And the talk has three parts. That's why we have, we have three people. I'll first talk a bit about general things about the project, how it started, where it's now, and a bit of the internals. And then comes the fun part, which are two demos, one about how to begin a project with a liar, and another one on how to contribute your projects to a liar. So let's go. Why in the first place this project exists? Well, I think that nowadays every language, every platform has a way of installing dependencies, installing other projects. And truth is that we have become used to be able to do this. Yes? Sorry. And well, this is true for more, for young languages, but it's also true for other well-established languages and platforms. So a question that gets asked from time to time is how do you in Ada find new projects to use, or how to install dependencies? And well, we have to say there is no way in Ada you have to finish the projects around and install them manually, and then you can use them. And the truth is that when I started this project, there was, to my knowledge, no related project for Ada, besides the outstanding efforts for the Debian, which has very good support for Ada packages. Then there is a project from the DSD guy, Luis Merino, I think it's the name, which is a kind of system package manager. So it's not for Ada, but it has very good support for Ada packages. And then we have now Liar, which is really oriented to support the Ada world. So another more for the list. And then besides the expectancy of having this, or the comfort of having this, there are real advantages on using package manager. For starters, it simplifies reusing code if you are aware that other libraries exist, and you can install them quickly and easily. And also, if libraries are classified with proper descriptions and tags, you are more likely to find something that you can reuse instead of rolling your own solution. A post platform library manager will help you in making your libraries available in a number of platforms, not only on the platform you are working. It can help into providing reproducible builds. If you say this project builds with those dependencies, and if you build them, you will get the same binary that I am providing for download, you can verify that you are using the proper dependencies. And finally, in the fast evolving world of software, it might help on updating your dependencies when new bugs are found, vulnerabilities, and so on. You just do an update, and you get all the new versions of libraries if they are properly maintained, and you get a fixed execution. And well, that's about the motivation. But now moving, in particular, into our project. I just checked for preparing this talk. When this all started, and the community has debated from time to time about this, but it was now crazy back. It's now four years ago that I opened the first repository to have discussions about this. And we had some talks also in the news group. Then for two years, nothing else happened. And then when I sent the first session to other Europe, which was rejected properly, because it was really rough at that point in time. The same year in 2018, I did a research visit with Adakor, and for other matters that you saw this morning, if you were here. And that gave us the opportunity to talk about that the Adakor community was asking for a project manager. There was none. Adakor was also interested in having something for this. So from that, we kept in touch. And last year, Adakor also gave support to the project, which allowed me to work more time on it. And also, people from Adakor is also contributing now. So it's not a single person anymore. And just a couple of months ago, Fabian, I think, was due that you invited some people to start testing the project to find what's OK and what's missing, and to have new points of view, and so on. And he also suggested that today is a good day, since we are in a developer environment, to announce that we can start the public beta. So all feedback is welcome. In particular, we are developing on Linux. So feedback from Windows and Mac OS is more needed. And so it is. That's from the historical point of view, but in terms of functionality. My personal feeling is that right now is when the project is starting to come together in the sense that it's starting to be really useful. As part of the close beta, we got many contributions of projects that, of course, people in Adakor know that exist. But now they are starting to be accessible through Alaya. And also, we have a better picture of what is missing versus what is done. Because up to this point, sometimes I felt like a programmer doing a programming a game, but not playing his own game, because it's a busy programming game. And so I'm doing the things in Adaya. And I always use the same features, but I don't have the perspective of other people. And this internal beta and the collaboration with Adakor has given me a much better perspective on what's missing and what can be done. So for the immediate future, well, of course, what can be done, you are going to see firsthand from the demonstrations. And I will talk just a bit about some basic capabilities. But if everything goes to plan, I expect that 2020 is going to be a very big year for the project. Because with this knowledge and the momentum we have gained in the past year, I think we are going to close the biggest holes in the project. And so some things can be done. But are very inconvenient to do right now, like the publishing workflow. It's a bit, you can do it, but it requires some knowledge and some, well, you will see. And there are features that we want to have that are not there, like reproducible builds, for example. And as I said, well, if we want to also put out the first stable release with binaries, the project is already compiling in the third platforms. It's going through continuous integration. But as I said, we are using it mainly in Linux. So feedback from the other platforms will be very welcome. And that's more or less how the project is right now. You are going to see two demos. I had planned to do a little demonstration but the computer is offline. I'm not going to do it. But the gist of this demonstration was that even if you are not an AIDA developer or you don't want to use AIDA dependencies, a liar may serve to test AIDA software in a simple way. By using the get command, you retrieve all the sources needed to build a project with all the dependencies. And you can test it immediately. So even if you are not interested in learning about a liar or digging into AIDA development, this can be done already. And of course, you can search the projects that are available. While moving a bit into how the project is done, I will talk about a few internal things. And I will think. For starters, the project is in GitHub. There are several repositories that you can find there all under the umbrella of the Alier project. And they contain the community index, the main executable and library, and other supporting projects. And here, a note about terminology. In the Alier index, a repository will have the community index. What those mean, the community index is all composed of open source projects, contributed projects, Alier supports handling several indexes. If, for example, you have private indexes with your private software that you don't want to publish, or that is not ready for publication yet, or things like that. So this is the official index from the project. Then we have two AIDA projects that for now live in the same repository. I guess at some point they will have to split. But for now, we have a library component that could be used maybe to create a nicer interface. And then we have the command line tool that in the spirit of other tools like Git and so on, it's a three-letter command. I find myself sometimes mixing the Git and Alier commands already. And well, that's the notable terminology. And what kind of package manager is Alier? Of the many possibilities, well, Alier's sandbox in the sense that it's not going to touch your system. It will create a folder. Inside that folder, you have everything you need for the current project you are working on. It's oriented towards the AIDA language. We are doing it for the open source AIDA compiler, which is GNAT. And so it's not intended to manage a platform or a system, but only to give you development for AIDA. It works with sources. AIDA is highly portable. So there is no pressure to distribute binaries. Everything is downloaded and compiled. And finally, it's a community effort in the sense that it's not sanctioned by any official AIDA body in the sense that, for example, Rust cargo is part of the tooling of the language officially. So that's where Alier is located. Well, Alier, if you have worked with package managers, it reduces the same ideas, which is named releases with semantic versions. And we use the term create to refer to several releases from the same project, because the other possible names are taken in the AIDA world for very precise meanings. This was a kind of maybe controversial decision, but it has a very precise meaning that other developers know. So that's how it is. Semantic versioning, I'm sure you know, that is the way to ensure that you can update your packages without breaking the build if everything is properly packaged. So I will not stop too much here. And well, here we see an example of how dependencies are realized once you retrieve a project. We can specify that we need two libraries. And those libraries are solved recursively, incorporating their own dependencies. Finally, you reach a combination of dependencies that allow the build. The solver in Alier is complete, so if there is a solution, it should find it. And to conclude, here's how it looks on disk when you work in a project. You have your project with your files, whatever you want. And everything else is within an Alier folder, which is intended to be put into the ignore list of your version control system. So you don't need to know anything about Alier internals. And in there, you can find mainly the dependencies that are needed to build your project. And this is the end of my introduction. Now I leave you with Fabien and Pierre-Marie. Try to turn it off. OK. So do you? So Pierre-Marie will be typing for me. Sorry, I'm going to try to fix that. OK. So the first demo is going to show how great package manager, especially Alier, is to start prototyping projects in Ada. So there are many libraries available on the web for Ada. But the fact that they are all in Alier makes them very easy to use. And so very easy to create a new project quickly. So the project that we are going to do is going to take and going to read a configuration file in a Tommel format and generate a PDF with a square in it. And the color of the square will depend on the configuration in the Tommel file. So first, we're going to start by creating a project. So Pierre-Marie will use the Alier init command, specifying bin because it's going to be unexecutable. Otherwise, it would be lib. So OK, you can create that. If you go demo effect. So yeah, you do have to, right now, you have to compile Alier yourself. Because we don't have binary release yet. And of course, you have to add it in your path. So the project is created now. So if you go to the My Project directory, so Alier is already creating some base files for us. So you can already do Alier build to compile it. That should work. So now I want to have a Tommel file as input. So I'm going to search in Alier to find if there's something available. So Alier list. So here, we use a local index to not rely on the network for this demo. So there's only what we need. Actually, we're missing a few characters on the left. But there's an Ada Tommel project here. So that's exactly what I need. So Pierre-Marie will have. Oh, what's going on? I'm doing. I wanted to acknowledge. Well, I think it's going to be OK. So yes. Right. Perfect. So now we want to use the Ada Tommel parser. So we are going to specify that it's a dependency of our project with the width command. So Alier with Ada Tommel. And so that's it. So here, everything is local. But otherwise, you would download the sources from the network. But here, everything is local. So now we can open the project file and add the dependency in the project file. So with Ada Tommel, that's it. OK. And now you can close and recompile. And now we can compile with the dependency. So Alier will also compile the Tommel library. And so now we can start working in our source file. And first, we will width the Ada Tommel package. Maybe Pierre-Marie, you can start copy past from the thing we prepared that would be easier. So yeah, we're going to width the Tommel file and also add a text to you to have some text output. OK. We're going to create a result variable. Actually, it's a constant. This is the result of opening a Tommel file. So that's the Ada Tommel API. And then the first if statement, we're going to check if we could open or not the Tommel file. So yeah. OK. So now we can go back to the command line and you can compile the project. OK. Everything works fine. And if you do Alier run, this will actually execute our program. And of course, we don't have any Tommel config file. So we see the error here. So now you can open config.tommel file, create a config.tommel file. And we are going to put some parameters in it. So we're going to set RGB values in floating points. So for instance, just r equals 0.5 and g equals 0, 0. And b equals 0, 0, for instance. So that's our Tommel configuration. So you can close. And if you run again, this time we should be able to load the Tommel. So now we have the ability to load a configuration very quickly. And now we want to have the possibility to export to a PDF. So we are going to look in the list of projects that we have in Ada Air. And we see that it's very nice. Thank you, Gauthier. We have a project to generate PDFs. So same procedure, Alaya with APDF. So now it's a dependency. We can open yet again the project file to add this in our project. No, I don't think the name is the same. Actually, you have to look on the PDF out, I think. Yeah, PDF, how's it? Yeah, so you can remove APDF. OK, nice. Now with the go back to the source file, we can copy pass the value. So here we are reading. So from the Tommel result, we are going to get the R, G, and B values. And convert to PDF output real types. So this is reading the configuration from the Tommel file. Yeah, to the end. And then we open. Yeah, we create a PDF. We set the color from the configuration. And we draw a rectangle. And we close the PDF. So if you save and do Alaya run, actually, because Alaya run, we'll also try to build before. And hopefully this is going to work. And if you open the PDF, we should have a somewhat red square. So that's it for the demo. Just to show you how quickly we can prototype stuff with Alaya. That's otherwise, it would have been possible before, but you would have to search on GitHub and download things. And you don't know to install them, et cetera, et cetera. With this, it's extremely quick to do so. So now to Pierre-Marie for now that you have benefited from the contribution of the community, how you can now contribute back. OK, thank you Fabien. So yes, we have this great project. And now we want to make it available for the outer world. So there are several steps to do it. So I won't do it here because I'm not going to be able to do it in the future. So I'm going to do it in the future. And I'm going to do it in the future. And I'm going to do it in the future. So I'm going to do it in the future. And I'm going to do it in the future. I won't do it here because I'm offline. But the step is to first clone the Git repository that contains every catalog of every AIDA project registered in Alaya. Then you add this index you make. Or it should be Alaya here. Three little acronyms. Anyway, you make Alaya aware of this index that you have cloned. And then you have to write some configuration files to describe the project that you want to make available to the outer world. So this file, so it's a Tommel file. Tommel is a syntax that looks like any files for those who know it. And it's very simple. But most importantly, so what data you have to put in the file is described in the documents that describe what you need to put there. And so yeah. So we'll do this in a moment. But just for what we have to do, so we want to put the name of the project that we want to contribute to. Some kind of text, free proposed text to describe what the project is about. We can put a website. We can give a list of authors. We have also a list of what we call maintainers. So it's the people. So you, when you write Tommel files in Alaya, it's you are a maintainer. You are the person not necessarily that's wrote the project, but the person who makes this project available to the other world. You are the maintainer. And yes, and really specific. So generally, software evolves. You don't want to. So when you publish a project, it's the first version. But you want sometimes to publish other versions, updates. And so in the index, you have one file that describes all the various releases. And so it's time to do the demo. OK, so as I said, I want to do the regular clone because I don't have internet here. But OK, so we have this nice project. And actually, the index, a fake version of the index, is here. So what does the index looks like? More like this. So each Tommel file describes one project that is made available. You have this file that is a kind of manifest. And here, well, this is not what you should have usually. I mean, these two archives are the sources of the project we want to contribute. You are not supposed to put them in the index. In the index, you put, you say, oh, OK, this source package for the release one of my project is, well, download it on GitHub from somewhere else. But here, we put there here just because of the demo effect, we don't want to rely on the internet, being able to reach the internet. All right, so I don't know the format by heart. And I think nobody should bother actually learning it. So I just take another something else as an example and write my own. So yes, first of all. So my project is called My Project. So I'll create a directory to put. All right, so I'm creating this file to describe My Project. So first of all, I have to put some general information about the project so I can put a description. Here we are. So who wrote this library? Well, it's Fabien. Thank you. You are the author. On the other hand, I am the maintainer. So because I'm the one writing the demo file. And something important, it's the logins. Because the so this is my login on GitHub. They're contributing to the community index on GitHub is special. We are making a proof so that when you write, when you contribute a project, you are the only one able to modify it in the future. And so putting my login here, make sure that future contributions to this file will be only I will be able to do them. All right, so now I give the list of project files that are part of this of my project. So here it's simple. All right, license. I don't think it's OK because we haven't chosen the license for your project. So no license. All right, and then so this is the first release of this magnificent project. So this is release 0.1. And so yes, I need to create a source package so that's a layer can get the sources from somewhere. So let's create a source package. I'll be right back. So my project is inside my project folder. So let's do this. I should have written if you want to do things right. OK, so we have a source package. Actually, I should have. Sorry about this. I should have removed the Allier directory in it because it's not supposed to be part of the sources. All right, so I will create my source package and then moving it to the index. Again, this specific part, you're not supposed to do it. You just publish a source archive somewhere on the internet. It's just fine. But here we don't have internet. With GitHub, it's really easy to push an archive on the repositories. All right. Really, that's what we recommend. I don't want to make typos. All right, so back to my description. So it's a local file. There I am. All right. So now my software is registered in the index. Let's try to actually use it. And when it is, oh, the maintainer should be in email. OK. So there's a lot of checks on what needs to be under required field, et cetera. So don't worry too much. We will check before we add your file in the index. And yes, something important. So I gave the source archive. But Alayr wants you to put some checks on. Integrate so that when it downloads the source, it needs to be sure that it's actually the exact source that was intended when the project was registered, the security check. So we have to compute 512 sums. So let's do this for my source archive. Where is it? OK. So this is the checksum. It's very secure. OK. So now I did the sum. So it's great. Alayr, no, it's not this one. Yeah, this one. So I have the sources and some sources. Now I should be able to build it. But no, no, I forgot an important step, which is telling Alayr that my project depends on other projects. So it's important so that Alayr, actually, when it gets my project, it also downloads the Adatomal project and the APDF one. So actually, it was wrong. So let's fix it. Let's fix this here. So how do we declare dependencies? Well, it's simple. We say something like this without typos. And we say, OK, so the release 0.1 of my project depends on, so it's Adatomal. And we depend on, so here we depend on version 1. And this is the kind of special syntax to give constraints about, because generally, you can depend on version 1.0 of a project. But this is also supposed to work with version 1.1, et cetera. You don't want to list every release possible. So there is a special DSL to express the dependencies. I won't cover it here. And so APDF, if I remember correctly, it's 5.0.0. I'm not sure. Let's try. Oh, but wait. I can ask Alayr. No, so I meant show. Yeah, show. APDF, its version currently. OK, I can read it here, but. Yeah, it's 5.0. Yeah, 5.0. Oh, yes, great. So it's 5. Not great. So this is my new index. Now let's try again to get the project and build it. I can use, I don't remember if it's build or compile. OK, thanks. And what's wrong? Could not translate the difference. No, I see. Oh, it's not supposed to. There is no. Oh, yes, right. Adatoml is not version 0.0. It's not 1.0.0. It's 0.1. Sorry about this. Yeah, so now the dependencies have been correctly set up. Alayr is able to properly set up the project. And now, yes, it worked. We have all outputs at APDF. OK, so it's more simple. There are several good shares and we are running out details. But this is a quick, that was a quick demo of how to contribute a project to the Outworld. You want to. Yeah, go finish with the website. Yes. Thank you. So as you can see, the process is a bit tedious to contribute. And that's why, as Alayr Andros said, that's one of the things we want to improve in 2020, make this process easier and quicker. So to end the presentation, I'm going to show you the prototype, or more or less proof of concept website that we have on. So it's at alayr.ada.dev. So this is the main page. It's actually a copy of the readme from the repository. So you have instructions to get started, how to compile Alayr, and how to start using it. Then you have two main pages. You have the crates, which is the list of crates available in the system. And you also have a search. So if we look at the crates, so here you have all the projects that are actually in Alayr available today. So you have the list here. And then we are going to open one of them. And so you have at the top, you have some, actually, the information that you saw, Pierre-Marie enter in the Tommel file. You can find it here. So we have the name. We have the short description, website, et cetera. And then you can also put a long description with a markdown format to provide information to your users, et cetera. So this one has no dependency. But the dependencies are also listed here. And you can click to navigate the dependency. You can also have tags to be able to search for other projects related to this one. And so that's going to be the last one. Actually, when you click on a tag, it's like searching in the search box. And you can see the, for instance, I typed game. And I see all the game-related crates available. And so when you contribute a crate to the index, it will automatically, every day, regenerate the website to have your crate available. And so I think that's it for our presentation. We are really excited about Alayr because we think it's a game changer for the ecosystem. And hopefully, it will make it a lot easier for people to collaborate with Ada. And so as Alejandro said, now we are in an open beta period. So we expect a lot of feedback from you all. And of course, new projects to put in the index. Thank you. Maybe I should add. Yes? No, if you want to, sorry. So if you want to check it out, go to the Alayr projects on GitHub. And so if you have issues, you can open issues directly on GitHub. And that was it. Yeah, that's the right way to give feedback is to go to this repository and open issues and even pull requests if you want to contribute. That would be great. Yeah, thank you, Pierre-Marie. Always useful. Thank you. Thank you. Do we have time for questions? Thank you. Next? Yes. So I'm starting here. As far as I remember, you were using the default GPR file that comes to the project with the engineer here. Right, so the question is, are we using the default GPR file that comes with each project? So yes, that's right. We try to not have specific requirements for Alayr in each project. So in theory, if you are already using GPR build to compile your project, it should work in Alayr as well. My actual question to this is, is it an option for you to make some restriction? And what can be in there? The problem with GPR is that it is near to impossible to overwrite some values that are defined inside the GPR file. So for example, if the developer says this is a dynamic library, it will always be a dynamic library. In some contexts, for example, you need a static library. So you have to write your completely own GPR file. OK, so the question is about configuration of the GPR build project. For instance, you can have variables to say that you want a static library or dynamic library. The answer is that you have some ways to declare those variables in the Tommel files, actually. So you specify in Alayr, you specify that this project has different options. And so they are visible from the Alayr point of view. You can also talk about this. Yeah, so actually, and that's the way. So in your Alayr Tommel file, you actually declare what are the variables from your project file. And then with Alayr build, you can specify them like you would do with GPR build. So it's, yeah? It depends on the library. The problem is that if you need a specific dependency and the dependency doesn't define what you need, you need the dependency with your project. For example, if you're targeting a specific platform. So I'm not sure where I'm going. So you just said if your dependency doesn't specify what you need, there's a problem. Well, we have this that we need to compile our dependencies with positioned independent executable. The library didn't define anything that we could tell the compiler, OK, compile this library with me. OK, so I think the answer is, I don't know, but maybe we can talk after because it's a bit complex. So there's also going to be, in my opinion, a discussion between people contributing libraries and people using them. So if you find a library in Alayr that doesn't have what you need, you should contact the maintainer and say, hey, maybe you should have this and for the next release, et cetera, et cetera. But so far, let's say we're not looking that much into the details of how things are built and so on and so forth. And also, yeah, we are relying on GPR builds. So if there's limitation with GPR builds, we have to deal with them. Oh, yes. Yes? Maybe on the fifth, I'd like to know, is there a plan to integrate the modifications and work with the GPR file you've heard? Because when you do Alayr with, why does it? Is there a reason why it doesn't add the with to the GPR file? And the other way around, if you create a new project and you already have a GPR file, it should determine the dependencies. At this point, the reason is that I don't like tools that modify my files. So when I did this, files that Alayr generates are as complete as possible, but my files, my project file, is not modified. We discussed sometimes about this. We might perhaps add some switch that you tell Alayr, OK, go ahead and modify my project file. I'm OK with that, for example. But that's the actual reason right now. I guess I can't really imagine somebody doing a Alayr with and then not adding a GPR file. Yeah, yeah, this happens. This happens. So yeah, one something specific as well is that sometimes from one Alayr crate, you will have several GPR files and you don't necessarily want to use all of them. So it's not we are living in an ecosystem where there are already projects out there and they do not necessarily fit perfectly the Alayr scheme. So there are things that are a bit different from the basic case that we show here, which is one project with one project file. Why is it to do? These GPR files, they are not listed. For me, it would be nice, A, if the GPR files were listed in the crate, what I can do with from that crate. And then maybe that, OK, if you do an Alayr with, it could tell you, if you want to start using the package, at least with something to your GPR file. OK. Because if we are targeting new users with the language, this is something that they will maybe start with. Yeah, that's a good suggestion. So yeah, you want to repeat? Yeah, the question was that when you do the Alayr with, it gets added to the dependencies, but the project file is not modified, so it won't build out of the box. So you have to manually add it to the GPR, to your own project file. And yes, the suggestion is to inform the user that the dependency that you just added has all those project files available for use. Cool. And, sir, second question. No, sorry. There was a second question that was, tell me if I'm wrong. Couldn't Alayr read an existing project file? And guess what packages should be added as dependencies? So it could, but you don't have the version information in the GPR file. So for instance, if your project file depends on the ADATOMAL library, which version should Alayr? We could add the heuristics and so on, but it's getting much more complex than the other. So it sounds nice as a feature. And useful, but it's not clear how it should work exactly. Yeah, but maybe this is more about the hints than the terms that we've taken in the past. Right. The hints could be definitely useful. And actually what you said about telling the users there are these and that project file available, actually we do have the list of project files in the Tommel. It's available. So that's, I think, yeah, that's something that's definitely doable. So I invite you actually to open an issue and share your feedback. Right. And provide the code. Yeah, if you want to implement it, that's fine as well. Yes. One question. Regarding the maintainer and your provide the object for Alayr, and there was the mentioning that the maintainer is an email login, it can't be changed. So once it declared to be the main channel, and then when you just kind of lose interest, what happens? So the question is about the. Is it somehow somebody else can take over? Yeah, I get it. So the question is about the maintainers and maintainers logins in the Tommel file. So we said that it's to make sure that you are the owner of the Tommel file and that you're the only one who can change it. Actually, what's happened? So we have a maintainer field with emails, because we want to be able to contact you at some point. We also have maintainers logins with GitHub logins, and that's actually for automated checks. So when you contribute to the Alayr index, you do a pull request, and there's a check that you are allowed to modify this file. But actually, if you want to transfer the ownership, you can modify the file to remove your name and put someone else's login. And that's how you would transfer the ownership. And so far, we'll see in the future, but so far everything is moderated. So we have a manual review. So even if someone disappears, we can decide to transfer the ownership at some point. Nothing is really set in stone for the maintainers. We can work around things like that. Yes? Do you plan to package Adadrivers library? OK, so the question is, do we plan to package Adadrivers library, which is a project for embedded development in Ada? The answer is yes, but the real question is how. Because I actually started, there's already embedded crates available, drivers for the SEMD51 microcontroller. The problem right now is that the architecture of the Adadrivers library project does not fit very well with Alayr, because it's not modular enough. So we have to find a good way to do it, but yes, absolutely, it will be in Ada here at some point. OK, I think that's it. Thank you. Thank you all. Thank you.
 Okay, so thank you everybody.  Thank you for the presentation.  So I'm going to talk first a bit about a liar.  That means a library repository.  And the talk has three parts.  That's why we have, we have three people.  I'll first talk a bit about general things about the project,  how it started, where it's now, and a bit of the internals.  And then comes the fun part, which are two demos, one about how  to begin a project with a liar, and another one  on how to contribute your projects to a liar.  So let's go.  Why in the first place this project exists?  Well, I think that nowadays every language, every platform has a way  of installing dependencies, installing other projects.  And truth is that we have become used to be able to do this.  Yes?  Sorry.  And well, this is true for more, for young languages,  but it's also true for other well-established languages  and platforms.  So a question that gets asked from time to time is how do you  in Ada find new projects to use, or how to install dependencies?  And well, we have to say there is no way in Ada you have  to finish the projects around and install them manually,  and then you can use them.  And the truth is that when I started this project,  there was, to my knowledge, no related project for Ada,  besides the outstanding efforts for the Debian, which  has very good support for Ada packages.  Then there is a project from the DSD guy, Luis Merino,  I think it's the name, which is a kind of system package manager.  So it's not for Ada, but it has very good support  for Ada packages.  And then we have now Liar, which is really  oriented to support the Ada world.  So another more for the list.  And then besides the expectancy of having this,  or the comfort of having this, there  are real advantages on using package manager.  For starters, it simplifies reusing code  if you are aware that other libraries exist,  and you can install them quickly and easily.  And also, if libraries are classified with proper descriptions  and tags, you are more likely to find something  that you can reuse instead of rolling your own solution.  A post platform library manager will  help you in making your libraries available  in a number of platforms, not only on the platform  you are working.  It can help into providing reproducible builds.  If you say this project builds with those dependencies,  and if you build them, you will get the same binary  that I am providing for download,  you can verify that you are using the proper dependencies.  And finally, in the fast evolving world of software,  it might help on updating your dependencies  when new bugs are found, vulnerabilities, and so on.  You just do an update, and you get all the new versions  of libraries if they are properly maintained,  and you get a fixed execution.  And well, that's about the motivation.  But now moving, in particular, into our project.  I just checked for preparing this talk.  When this all started, and the community has debated  from time to time about this, but it was now crazy back.  It's now four years ago that I opened the first repository  to have discussions about this.  And we had some talks also in the news group.  Then for two years, nothing else happened.  And then when I sent the first session to other Europe,  which was rejected properly, because it was really  rough at that point in time.  The same year in 2018, I did a research visit with Adakor,  and for other matters that you saw this morning,  if you were here.  And that gave us the opportunity to talk about that the Adakor  community was asking for a project manager.  There was none.  Adakor was also interested in having something for this.  So from that, we kept in touch.  And last year, Adakor also gave support  to the project, which allowed me to work more time on it.  And also, people from Adakor is also contributing now.  So it's not a single person anymore.  And just a couple of months ago, Fabian, I think,  was due that you invited some people to start testing  the project to find what's OK and what's missing,  and to have new points of view, and so on.  And he also suggested that today is a good day,  since we are in a developer environment,  to announce that we can start the public beta.  So all feedback is welcome.  In particular, we are developing on Linux.  So feedback from Windows and Mac OS is more needed.  And so it is.  That's from the historical point of view,  but in terms of functionality.  My personal feeling is that right now  is when the project is starting to come together  in the sense that it's starting to be really useful.  As part of the close beta, we got many contributions  of projects that, of course, people in Adakor  know that exist.  But now they are starting to be accessible through Alaya.  And also, we have a better picture  of what is missing versus what is done.  Because up to this point, sometimes I  felt like a programmer doing a programming a game,  but not playing his own game, because it's  a busy programming game.  And so I'm doing the things in Adaya.  And I always use the same features,  but I don't have the perspective of other people.  And this internal beta and the collaboration with Adakor  has given me a much better perspective on what's missing  and what can be done.  So for the immediate future, well, of course, what can be done,  you are going to see firsthand from the demonstrations.  And I will talk just a bit about some basic capabilities.  But if everything goes to plan, I  expect that 2020 is going to be a very big year for the project.  Because with this knowledge and the momentum we have gained  in the past year, I think we are going  to close the biggest holes in the project.  And so some things can be done.  But are very inconvenient to do right now,  like the publishing workflow.  It's a bit, you can do it, but it requires some knowledge  and some, well, you will see.  And there are features that we want  to have that are not there, like reproducible builds,  for example.  And as I said, well, if we want to also put out  the first stable release with binaries,  the project is already compiling in the third platforms.  It's going through continuous integration.  But as I said, we are using it mainly in Linux.  So feedback from the other platforms  will be very welcome.  And that's more or less how the project is right now.  You are going to see two demos.  I had planned to do a little demonstration  but the computer is offline.  I'm not going to do it.  But the gist of this demonstration  was that even if you are not an AIDA developer  or you don't want to use AIDA dependencies,  a liar may serve to test AIDA software in a simple way.  By using the get command, you retrieve all the sources needed  to build a project with all the dependencies.  And you can test it immediately.  So even if you are not interested in learning about a liar  or digging into AIDA development, this can be done already.  And of course, you can search the projects that are available.  While moving a bit into how the project is done,  I will talk about a few internal things.  And I will think.  For starters, the project is in GitHub.  There are several repositories that you  can find there all under the umbrella of the Alier project.  And they contain the community index,  the main executable and library, and other supporting projects.  And here, a note about terminology.  In the Alier index, a repository will  have the community index.  What those mean, the community index  is all composed of open source projects,  contributed projects, Alier supports handling  several indexes.  If, for example, you have private indexes  with your private software that you don't want to publish,  or that is not ready for publication yet, or things  like that.  So this is the official index from the project.  Then we have two AIDA projects that for now  live in the same repository.  I guess at some point they will have to split.  But for now, we have a library component  that could be used maybe to create a nicer interface.  And then we have the command line tool  that in the spirit of other tools like Git and so on,  it's a three-letter command.  I find myself sometimes mixing the Git and Alier commands  already.  And well, that's the notable terminology.  And what kind of package manager is Alier?  Of the many possibilities, well, Alier's sandbox  in the sense that it's not going to touch your system.  It will create a folder.  Inside that folder, you have everything  you need for the current project you are working on.  It's oriented towards the AIDA language.  We are doing it for the open source AIDA compiler,  which is GNAT.  And so it's not intended to manage a platform or a system,  but only to give you development for AIDA.  It works with sources.  AIDA is highly portable.  So there is no pressure to distribute binaries.  Everything is downloaded and compiled.  And finally, it's a community effort in the sense  that it's not sanctioned by any official AIDA body in the sense  that, for example, Rust cargo is part of the tooling  of the language officially.  So that's where Alier is located.  Well, Alier, if you have worked with package managers,  it reduces the same ideas, which is named releases  with semantic versions.  And we use the term create to refer to several releases  from the same project, because the other possible names  are taken in the AIDA world for very precise meanings.  This was a kind of maybe controversial decision,  but it has a very precise meaning that other developers know.  So that's how it is.  Semantic versioning, I'm sure you know,  that is the way to ensure that you can update your packages  without breaking the build if everything is properly packaged.  So I will not stop too much here.  And well, here we see an example of how dependencies are  realized once you retrieve a project.  We can specify that we need two libraries.  And those libraries are solved recursively,  incorporating their own dependencies.  Finally, you reach a combination of dependencies  that allow the build.  The solver in Alier is complete, so if there is a solution,  it should find it.  And to conclude, here's how it looks on disk  when you work in a project.  You have your project with your files, whatever you want.  And everything else is within an Alier folder,  which is intended to be put into the ignore list  of your version control system.  So you don't need to know anything  about Alier internals.  And in there, you can find mainly the dependencies that  are needed to build your project.  And this is the end of my introduction.  Now I leave you with Fabien and Pierre-Marie.  Try to turn it off.  OK.  So do you?  So Pierre-Marie will be typing for me.  Sorry, I'm going to try to fix that.  OK.  So the first demo is going to show  how great package manager, especially Alier,  is to start prototyping projects in Ada.  So there are many libraries available on the web for Ada.  But the fact that they are all in Alier  makes them very easy to use.  And so very easy to create a new project quickly.  So the project that we are going to do  is going to take and going to read a configuration file  in a Tommel format and generate a PDF with a square in it.  And the color of the square will depend on the configuration  in the Tommel file.  So first, we're going to start by creating a project.  So Pierre-Marie will use the Alier init command,  specifying bin because it's going to be unexecutable.  Otherwise, it would be lib.  So OK, you can create that.  If you go demo effect.  So yeah, you do have to, right now,  you have to compile Alier yourself.  Because we don't have binary release yet.  And of course, you have to add it in your path.  So the project is created now.  So if you go to the My Project directory,  so Alier is already creating some base files for us.  So you can already do Alier build to compile it.  That should work.  So now I want to have a Tommel file as input.  So I'm going to search in Alier to find  if there's something available.  So Alier list.  So here, we use a local index to not rely on the network  for this demo.  So there's only what we need.  Actually, we're missing a few characters on the left.  But there's an Ada Tommel project here.  So that's exactly what I need.  So Pierre-Marie will have.  Oh, what's going on?  I'm doing.  I wanted to acknowledge.  Well, I think it's going to be OK.  So yes.  Right.  Perfect.  So now we want to use the Ada Tommel parser.  So we are going to specify that it's  a dependency of our project with the width command.  So Alier with Ada Tommel.  And so that's it.  So here, everything is local.  But otherwise, you would download the sources  from the network.  But here, everything is local.  So now we can open the project file  and add the dependency in the project file.  So with Ada Tommel, that's it.  OK.  And now you can close and recompile.  And now we can compile with the dependency.  So Alier will also compile the Tommel library.  And so now we can start working in our source file.  And first, we will width the Ada Tommel package.  Maybe Pierre-Marie, you can start copy past from the thing  we prepared that would be easier.  So yeah, we're going to width the Tommel file  and also add a text to you to have some text output.  OK.  We're going to create a result variable.  Actually, it's a constant.  This is the result of opening a Tommel file.  So that's the Ada Tommel API.  And then the first if statement,  we're going to check if we could open or not the Tommel file.  So yeah.  OK.  So now we can go back to the command line  and you can compile the project.  OK.  Everything works fine.  And if you do Alier run, this will actually  execute our program.  And of course, we don't have any Tommel config file.  So we see the error here.  So now you can open config.tommel file,  create a config.tommel file.  And we are going to put some parameters in it.  So we're going to set RGB values in floating points.  So for instance, just r equals 0.5 and g equals 0, 0.  And b equals 0, 0, for instance.  So that's our Tommel configuration.  So you can close.  And if you run again, this time we  should be able to load the Tommel.  So now we have the ability to load a configuration very  quickly.  And now we want to have the possibility  to export to a PDF.  So we are going to look in the list of projects  that we have in Ada Air.  And we see that it's very nice.  Thank you, Gauthier.  We have a project to generate PDFs.  So same procedure, Alaya with APDF.  So now it's a dependency.  We can open yet again the project file  to add this in our project.  No, I don't think the name is the same.  Actually, you have to look on the PDF out, I think.  Yeah, PDF, how's it?  Yeah, so you can remove APDF.  OK, nice.  Now with the go back to the source file,  we can copy pass the value.  So here we are reading.  So from the Tommel result, we are  going to get the R, G, and B values.  And convert to PDF output real types.  So this is reading the configuration from the Tommel  file.  Yeah, to the end.  And then we open.  Yeah, we create a PDF.  We set the color from the configuration.  And we draw a rectangle.  And we close the PDF.  So if you save and do Alaya run, actually, because Alaya run,  we'll also try to build before.  And hopefully this is going to work.  And if you open the PDF, we should  have a somewhat red square.  So that's it for the demo.  Just to show you how quickly we can prototype stuff  with Alaya.  That's otherwise, it would have been possible before,  but you would have to search on GitHub and download things.  And you don't know to install them, et cetera, et cetera.  With this, it's extremely quick to do so.  So now to Pierre-Marie for now that you have benefited  from the contribution of the community, how you can now  contribute back.  OK, thank you Fabien.  So yes, we have this great project.  And now we want to make it available for the outer world.  So there are several steps to do it.  So I won't do it here because I'm not  going to be able to do it in the future.  So I'm going to do it in the future.  And I'm going to do it in the future.  And I'm going to do it in the future.  So I'm going to do it in the future.  And I'm going to do it in the future.  I won't do it here because I'm offline.  But the step is to first clone the Git repository that  contains every catalog of every AIDA project registered  in Alaya.  Then you add this index you make.  Or it should be Alaya here.  Three little acronyms.  Anyway, you make Alaya aware of this index  that you have cloned.  And then you have to write some configuration files  to describe the project that you want to make available  to the outer world.  So this file, so it's a Tommel file.  Tommel is a syntax that looks like any files for those who  know it.  And it's very simple.  But most importantly, so what data  you have to put in the file is described in the documents  that describe what you need to put there.  And so yeah.  So we'll do this in a moment.  But just for what we have to do, so we  want to put the name of the project  that we want to contribute to.  Some kind of text, free proposed text to describe  what the project is about.  We can put a website.  We can give a list of authors.  We have also a list of what we call maintainers.  So it's the people.  So you, when you write Tommel files in Alaya,  it's you are a maintainer.  You are the person not necessarily that's  wrote the project, but the person who  makes this project available to the other world.  You are the maintainer.  And yes, and really specific.  So generally, software evolves.  You don't want to.  So when you publish a project, it's the first version.  But you want sometimes to publish other versions, updates.  And so in the index, you have one file  that describes all the various releases.  And so it's time to do the demo.  OK, so as I said, I want to do the regular clone  because I don't have internet here.  But OK, so we have this nice project.  And actually, the index, a fake version of the index, is here.  So what does the index looks like?  More like this.  So each Tommel file describes one project that  is made available.  You have this file that is a kind of manifest.  And here, well, this is not what you should have usually.  I mean, these two archives are the sources of the project  we want to contribute.  You are not supposed to put them in the index.  In the index, you put, you say, oh, OK, this source package  for the release one of my project  is, well, download it on GitHub from somewhere else.  But here, we put there here just because of the demo effect,  we don't want to rely on the internet,  being able to reach the internet.  All right, so I don't know the format by heart.  And I think nobody should bother actually learning it.  So I just take another something else as an example  and write my own.  So yes, first of all.  So my project is called My Project.  So I'll create a directory to put.  All right, so I'm creating this file to describe My Project.  So first of all, I have to put some general information  about the project so I can put a description.  Here we are.  So who wrote this library?  Well, it's Fabien.  Thank you.  You are the author.  On the other hand, I am the maintainer.  So because I'm the one writing the demo file.  And something important, it's the logins.  Because the so this is my login on GitHub.  They're contributing to the community index on GitHub  is special.  We are making a proof so that when you write,  when you contribute a project, you are the only one  able to modify it in the future.  And so putting my login here, make sure  that future contributions to this file  will be only I will be able to do them.  All right, so now I give the list of project files  that are part of this of my project.  So here it's simple.  All right, license.  I don't think it's OK because we haven't chosen the license  for your project.  So no license.  All right, and then so this is the first release  of this magnificent project.  So this is release 0.1.  And so yes, I need to create a source package  so that's a layer can get the sources from somewhere.  So let's create a source package.  I'll be right back.  So my project is inside my project folder.  So let's do this.  I should have written if you want to do things right.  OK, so we have a source package.  Actually, I should have.  Sorry about this.  I should have removed the Allier directory in it  because it's not supposed to be part of the sources.  All right, so I will create my source package  and then moving it to the index.  Again, this specific part, you're not supposed to do it.  You just publish a source archive somewhere on the internet.  It's just fine.  But here we don't have internet.  With GitHub, it's really easy to push an archive  on the repositories.  All right.  Really, that's what we recommend.  I don't want to make typos.  All right, so back to my description.  So it's a local file.  There I am.  All right.  So now my software is registered in the index.  Let's try to actually use it.  And when it is, oh, the maintainer should be in email.  OK.  So there's a lot of checks on what  needs to be under required field, et cetera.  So don't worry too much.  We will check before we add your file in the index.  And yes, something important.  So I gave the source archive.  But Alayr wants you to put some checks on.  Integrate so that when it downloads the source,  it needs to be sure that it's actually  the exact source that was intended when the project was  registered, the security check.  So we have to compute 512 sums.  So let's do this for my source archive.  Where is it?  OK.  So this is the checksum.  It's very secure.  OK.  So now I did the sum.  So it's great.  Alayr, no, it's not this one.  Yeah, this one.  So I have the sources and some sources.  Now I should be able to build it.  But no, no, I forgot an important step,  which is telling Alayr that my project depends  on other projects.  So it's important so that Alayr, actually,  when it gets my project, it also downloads  the Adatomal project and the APDF one.  So actually, it was wrong.  So let's fix it.  Let's fix this here.  So how do we declare dependencies?  Well, it's simple.  We say something like this without typos.  And we say, OK, so the release 0.1 of my project  depends on, so it's Adatomal.  And we depend on, so here we depend on version 1.  And this is the kind of special syntax  to give constraints about, because generally, you  can depend on version 1.0 of a project.  But this is also supposed to work with version 1.1, et cetera.  You don't want to list every release possible.  So there is a special DSL to express the dependencies.  I won't cover it here.  And so APDF, if I remember correctly, it's 5.0.0.  I'm not sure.  Let's try.  Oh, but wait.  I can ask Alayr.  No, so I meant show.  Yeah, show.  APDF, its version currently.  OK, I can read it here, but.  Yeah, it's 5.0.  Yeah, 5.0.  Oh, yes, great.  So it's 5.  Not great.  So this is my new index.  Now let's try again to get the project and build it.  I can use, I don't remember if it's build or compile.  OK, thanks.  And what's wrong?  Could not translate the difference.  No, I see.  Oh, it's not supposed to.  There is no.  Oh, yes, right.  Adatoml is not version 0.0.  It's not 1.0.0.  It's 0.1.  Sorry about this.  Yeah, so now the dependencies have been correctly set up.  Alayr is able to properly set up the project.  And now, yes, it worked.  We have all outputs at APDF.  OK, so it's more simple.  There are several good shares and we are running out details.  But this is a quick, that was a quick demo of how to contribute  a project to the Outworld.  You want to.  Yeah, go finish with the website.  Yes.  Thank you.  So as you can see, the process is a bit tedious to contribute.  And that's why, as Alayr Andros said,  that's one of the things we want to improve in 2020,  make this process easier and quicker.  So to end the presentation, I'm going  to show you the prototype, or more or less proof of concept  website that we have on.  So it's at alayr.ada.dev.  So this is the main page.  It's actually a copy of the readme from the repository.  So you have instructions to get started, how to compile Alayr,  and how to start using it.  Then you have two main pages.  You have the crates, which is the list of crates  available in the system.  And you also have a search.  So if we look at the crates, so here  you have all the projects that are actually  in Alayr available today.  So you have the list here.  And then we are going to open one of them.  And so you have at the top, you have some, actually,  the information that you saw, Pierre-Marie enter in the Tommel  file.  You can find it here.  So we have the name.  We have the short description, website, et cetera.  And then you can also put a long description  with a markdown format to provide information  to your users, et cetera.  So this one has no dependency.  But the dependencies are also listed here.  And you can click to navigate the dependency.  You can also have tags to be able to search for other projects  related to this one.  And so that's going to be the last one.  Actually, when you click on a tag,  it's like searching in the search box.  And you can see the, for instance, I typed game.  And I see all the game-related crates available.  And so when you contribute a crate to the index,  it will automatically, every day,  regenerate the website to have your crate available.  And so I think that's it for our presentation.  We are really excited about Alayr  because we think it's a game changer for the ecosystem.  And hopefully, it will make it a lot easier for people  to collaborate with Ada.  And so as Alejandro said, now we are in an open beta period.  So we expect a lot of feedback from you all.  And of course, new projects to put in the index.  Thank you.  Maybe I should add.  Yes?  No, if you want to, sorry.  So if you want to check it out, go  to the Alayr projects on GitHub.  And so if you have issues, you can open issues directly  on GitHub.  And that was it.  Yeah, that's the right way to give feedback  is to go to this repository and open issues  and even pull requests if you want to contribute.  That would be great.  Yeah, thank you, Pierre-Marie.  Always useful.  Thank you.  Thank you.  Do we have time for questions?  Thank you.  Next?  Yes.  So I'm starting here.  As far as I remember, you were using the default GPR file  that comes to the project with the engineer here.  Right, so the question is, are we  using the default GPR file that comes with each project?  So yes, that's right.  We try to not have specific requirements for Alayr  in each project.  So in theory, if you are already using GPR build  to compile your project, it should work in Alayr as well.  My actual question to this is, is it an option for you  to make some restriction?  And what can be in there?  The problem with GPR is that it is near to impossible to overwrite  some values that are defined inside the GPR file.  So for example, if the developer says this is a dynamic library,  it will always be a dynamic library.  In some contexts, for example, you need a static library.  So you have to write your completely own GPR file.  OK, so the question is about configuration  of the GPR build project.  For instance, you can have variables  to say that you want a static library or dynamic library.  The answer is that you have some ways  to declare those variables in the Tommel files, actually.  So you specify in Alayr, you specify  that this project has different options.  And so they are visible from the Alayr point of view.  You can also talk about this.  Yeah, so actually, and that's the way.  So in your Alayr Tommel file, you actually  declare what are the variables from your project file.  And then with Alayr build, you can specify them  like you would do with GPR build.  So it's, yeah?  It depends on the library.  The problem is that if you need a specific dependency  and the dependency doesn't define what you need,  you need the dependency with your project.  For example, if you're targeting a specific platform.  So I'm not sure where I'm going.  So you just said if your dependency doesn't specify  what you need, there's a problem.  Well, we have this that we need to compile our dependencies  with positioned independent executable.  The library didn't define anything  that we could tell the compiler, OK, compile this library  with me.  OK, so I think the answer is, I don't know,  but maybe we can talk after because it's a bit complex.  So there's also going to be, in my opinion,  a discussion between people contributing libraries  and people using them.  So if you find a library in Alayr that doesn't have what  you need, you should contact the maintainer and say,  hey, maybe you should have this and for the next release,  et cetera, et cetera.  But so far, let's say we're not looking that much  into the details of how things are built and so on and so  forth.  And also, yeah, we are relying on GPR builds.  So if there's limitation with GPR builds,  we have to deal with them.  Oh, yes.  Yes?  Maybe on the fifth, I'd like to know,  is there a plan to integrate the modifications  and work with the GPR file you've heard?  Because when you do Alayr with, why does it?  Is there a reason why it doesn't add the with to the GPR file?  And the other way around, if you create a new project  and you already have a GPR file, it  should determine the dependencies.  At this point, the reason is that I  don't like tools that modify my files.  So when I did this, files that Alayr generates  are as complete as possible, but my files, my project file,  is not modified.  We discussed sometimes about this.  We might perhaps add some switch that you tell Alayr, OK,  go ahead and modify my project file.  I'm OK with that, for example.  But that's the actual reason right now.  I guess I can't really imagine somebody doing  a Alayr with and then not adding a GPR file.  Yeah, yeah, this happens.  This happens.  So yeah, one something specific as well  is that sometimes from one Alayr crate,  you will have several GPR files and you don't necessarily  want to use all of them.  So it's not we are living in an ecosystem where there are  already projects out there and they do not necessarily fit  perfectly the Alayr scheme.  So there are things that are a bit different from the basic  case that we show here, which is one project with one project  file.  Why is it to do?  These GPR files, they are not listed.  For me, it would be nice, A, if the GPR files were listed  in the crate, what I can do with from that crate.  And then maybe that, OK, if you do an Alayr with,  it could tell you, if you want to start using the package,  at least with something to your GPR file.  OK.  Because if we are targeting new users with the language,  this is something that they will maybe start with.  Yeah, that's a good suggestion.  So yeah, you want to repeat?  Yeah, the question was that when you do the Alayr with,  it gets added to the dependencies,  but the project file is not modified,  so it won't build out of the box.  So you have to manually add it to the GPR, to your own project  file.  And yes, the suggestion is to inform the user  that the dependency that you just added  has all those project files available for use.  Cool.  And, sir, second question.  No, sorry.  There was a second question that was, tell me if I'm wrong.  Couldn't Alayr read an existing project file?  And guess what packages should be added as dependencies?  So it could, but you don't have the version information  in the GPR file.  So for instance, if your project file depends  on the ADATOMAL library, which version should Alayr?  We could add the heuristics and so on,  but it's getting much more complex than the other.  So it sounds nice as a feature.  And useful, but it's not clear how it should work exactly.  Yeah, but maybe this is more about the hints than the terms  that we've taken in the past.  Right.  The hints could be definitely useful.  And actually what you said about telling the users  there are these and that project file available,  actually we do have the list of project files in the Tommel.  It's available.  So that's, I think, yeah, that's something  that's definitely doable.  So I invite you actually to open an issue and share your feedback.  Right.  And provide the code.  Yeah, if you want to implement it, that's fine as well.  Yes.  One question.  Regarding the maintainer and your provide the object for Alayr,  and there was the mentioning that the maintainer is  an email login, it can't be changed.  So once it declared to be the main channel,  and then when you just kind of lose interest, what happens?  So the question is about the.  Is it somehow somebody else can take over?  Yeah, I get it.  So the question is about the maintainers and maintainers  logins in the Tommel file.  So we said that it's to make sure  that you are the owner of the Tommel file  and that you're the only one who can change it.  Actually, what's happened?  So we have a maintainer field with emails,  because we want to be able to contact you at some point.  We also have maintainers logins with GitHub logins,  and that's actually for automated checks.  So when you contribute to the Alayr index,  you do a pull request, and there's  a check that you are allowed to modify this file.  But actually, if you want to transfer the ownership,  you can modify the file to remove your name  and put someone else's login.  And that's how you would transfer the ownership.  And so far, we'll see in the future,  but so far everything is moderated.  So we have a manual review.  So even if someone disappears, we  can decide to transfer the ownership at some point.  Nothing is really set in stone for the maintainers.  We can work around things like that.  Yes?  Do you plan to package Adadrivers library?  OK, so the question is, do we plan to package Adadrivers  library, which is a project for embedded development in Ada?  The answer is yes, but the real question is how.  Because I actually started, there's already  embedded crates available, drivers for the SEMD51 microcontroller.  The problem right now is that the architecture of the Adadrivers  library project does not fit very well with Alayr,  because it's not modular enough.  So we have to find a good way to do it,  but yes, absolutely, it will be in Ada here at some point.  OK, I think that's it.  Thank you.  Thank you all.  Thank you.
ada_alire_0_16907.png ada_alire_16908_17579.png ada_alire_17580_17879.png ada_alire_17880_18131.png ada_alire_18132_18755.png ada_alire_18756_18815.png ada_alire_18816_19031.png ada_alire_19032_21107.png ada_alire_21108_22415.png ada_alire_22416_25103.png ada_alire_25104_25679.png ada_alire_25680_27851.png ada_alire_27852_27983.png ada_alire_27984_28079.png ada_alire_28080_28187.png ada_alire_28188_28331.png ada_alire_28332_31499.png ada_alire_31500_31571.png ada_alire_31572_31787.png ada_alire_31788_32135.png ada_alire_32136_32867.png ada_alire_32868_33203.png ada_alire_33204_38051.png ada_alire_38052_38363.png ada_alire_38364_39755.png ada_alire_39756_39899.png ada_alire_39900_44135.png ada_alire_44136_49355.png ada_alire_49356_50855.png ada_alire_50856_53231.png ada_alire_53232_58487.png ada_alire_58488_58811.png ada_alire_58812_60659.png ada_alire_60660_60899.png ada_alire_60900_63539.png ada_alire_63540_64007.png ada_alire_64008_64103.png ada_alire_64104_64283.png ada_alire_64284_64655.png ada_alire_64656_64967.png ada_alire_64968_65159.png ada_alire_65160_65255.png ada_alire_65256_65951.png ada_alire_65952_66383.png ada_alire_66384_66899.png ada_alire_66900_67043.png ada_alire_67044_67739.png ada_alire_67740_67967.png ada_alire_67968_68015.png ada_alire_68016_68939.png ada_alire_68940_70343.png ada_alire_70344_70847.png ada_alire_70848_72383.png ada_alire_72384_72671.png ada_alire_72672_73763.png ada_alire_73764_74048.png
Okay, so thank you everybody. Thank you for the presentation. So I'm going to talk first a bit about a liar. That means a library repository. And the talk has three parts. That's why we have, we have three people. I'll first talk a bit about general things about the project, how it started, where it's now, and a bit of the internals. And then comes the fun part, which are two demos, one about how to begin a project with a liar, and another one on how to contribute your projects to a liar. So let's go. Why in the first place this project exists? Well, I think that nowadays every language, every platform has a way of installing dependencies, installing other projects. And truth is that we have become used to be able to do this. Yes? Sorry. And well, this is true for more, for young languages, but it's also true for other well-established languages and platforms. So a question that gets asked from time to time is how do you in Ada find new projects to use, or how to install dependencies? And well, we have to say there is no way in Ada you have to finish the projects around and install them manually, and then you can use them. And the truth is that when I started this project, there was, to my knowledge, no related project for Ada, besides the outstanding efforts for the Debian, which has very good support for Ada packages. Then there is a project from the DSD guy, Luis Merino, I think it's the name, which is a kind of system package manager. So it's not for Ada, but it has very good support for Ada packages. And then we have now Liar, which is really oriented to support the Ada world. So another more for the list. And then besides the expectancy of having this, or the comfort of having this, there are real advantages on using package manager. For starters, it simplifies reusing code if you are aware that other libraries exist, and you can install them quickly and easily. And also, if libraries are classified with proper descriptions and tags, you are more likely to find something that you can reuse instead of rolling your own solution. A post platform library manager will help you in making your libraries available in a number of platforms, not only on the platform you are working. It can help into providing reproducible builds. If you say this project builds with those dependencies, and if you build them, you will get the same binary that I am providing for download, you can verify that you are using the proper dependencies. And finally, in the fast evolving world of software, it might help on updating your dependencies when new bugs are found, vulnerabilities, and so on. You just do an update, and you get all the new versions of libraries if they are properly maintained, and you get a fixed execution. And well, that's about the motivation. But now moving, in particular, into our project. I just checked for preparing this talk. When this all started, and the community has debated from time to time about this, but it was now crazy back. It's now four years ago that I opened the first repository to have discussions about this. And we had some talks also in the news group. Then for two years, nothing else happened. And then when I sent the first session to other Europe, which was rejected properly, because it was really rough at that point in time. The same year in 2018, I did a research visit with Adakor, and for other matters that you saw this morning, if you were here. And that gave us the opportunity to talk about that the Adakor community was asking for a project manager. There was none. Adakor was also interested in having something for this. So from that, we kept in touch. And last year, Adakor also gave support to the project, which allowed me to work more time on it. And also, people from Adakor is also contributing now. So it's not a single person anymore. And just a couple of months ago, Fabian, I think, was due that you invited some people to start testing the project to find what's OK and what's missing, and to have new points of view, and so on. And he also suggested that today is a good day, since we are in a developer environment, to announce that we can start the public beta. So all feedback is welcome. In particular, we are developing on Linux. So feedback from Windows and Mac OS is more needed. And so it is. That's from the historical point of view, but in terms of functionality. My personal feeling is that right now is when the project is starting to come together in the sense that it's starting to be really useful. As part of the close beta, we got many contributions of projects that, of course, people in Adakor know that exist. But now they are starting to be accessible through Alaya. And also, we have a better picture of what is missing versus what is done. Because up to this point, sometimes I felt like a programmer doing a programming a game, but not playing his own game, because it's a busy programming game. And so I'm doing the things in Adaya. And I always use the same features, but I don't have the perspective of other people. And this internal beta and the collaboration with Adakor has given me a much better perspective on what's missing and what can be done. So for the immediate future, well, of course, what can be done, you are going to see firsthand from the demonstrations. And I will talk just a bit about some basic capabilities. But if everything goes to plan, I expect that 2020 is going to be a very big year for the project. Because with this knowledge and the momentum we have gained in the past year, I think we are going to close the biggest holes in the project. And so some things can be done. But are very inconvenient to do right now, like the publishing workflow. It's a bit, you can do it, but it requires some knowledge and some, well, you will see. And there are features that we want to have that are not there, like reproducible builds, for example. And as I said, well, if we want to also put out the first stable release with binaries, the project is already compiling in the third platforms. It's going through continuous integration. But as I said, we are using it mainly in Linux. So feedback from the other platforms will be very welcome. And that's more or less how the project is right now. You are going to see two demos. I had planned to do a little demonstration but the computer is offline. I'm not going to do it. But the gist of this demonstration was that even if you are not an AIDA developer or you don't want to use AIDA dependencies, a liar may serve to test AIDA software in a simple way. By using the get command, you retrieve all the sources needed to build a project with all the dependencies. And you can test it immediately. So even if you are not interested in learning about a liar or digging into AIDA development, this can be done already. And of course, you can search the projects that are available. While moving a bit into how the project is done, I will talk about a few internal things. And I will think. For starters, the project is in GitHub. There are several repositories that you can find there all under the umbrella of the Alier project. And they contain the community index, the main executable and library, and other supporting projects. And here, a note about terminology. In the Alier index, a repository will have the community index. What those mean, the community index is all composed of open source projects, contributed projects, Alier supports handling several indexes. If, for example, you have private indexes with your private software that you don't want to publish, or that is not ready for publication yet, or things like that. So this is the official index from the project. Then we have two AIDA projects that for now live in the same repository. I guess at some point they will have to split. But for now, we have a library component that could be used maybe to create a nicer interface. And then we have the command line tool that in the spirit of other tools like Git and so on, it's a three-letter command. I find myself sometimes mixing the Git and Alier commands already. And well, that's the notable terminology. And what kind of package manager is Alier? Of the many possibilities, well, Alier's sandbox in the sense that it's not going to touch your system. It will create a folder. Inside that folder, you have everything you need for the current project you are working on. It's oriented towards the AIDA language. We are doing it for the open source AIDA compiler, which is GNAT. And so it's not intended to manage a platform or a system, but only to give you development for AIDA. It works with sources. AIDA is highly portable. So there is no pressure to distribute binaries. Everything is downloaded and compiled. And finally, it's a community effort in the sense that it's not sanctioned by any official AIDA body in the sense that, for example, Rust cargo is part of the tooling of the language officially. So that's where Alier is located. Well, Alier, if you have worked with package managers, it reduces the same ideas, which is named releases with semantic versions. And we use the term create to refer to several releases from the same project, because the other possible names are taken in the AIDA world for very precise meanings. This was a kind of maybe controversial decision, but it has a very precise meaning that other developers know. So that's how it is. Semantic versioning, I'm sure you know, that is the way to ensure that you can update your packages without breaking the build if everything is properly packaged. So I will not stop too much here. And well, here we see an example of how dependencies are realized once you retrieve a project. We can specify that we need two libraries. And those libraries are solved recursively, incorporating their own dependencies. Finally, you reach a combination of dependencies that allow the build. The solver in Alier is complete, so if there is a solution, it should find it. And to conclude, here's how it looks on disk when you work in a project. You have your project with your files, whatever you want. And everything else is within an Alier folder, which is intended to be put into the ignore list of your version control system. So you don't need to know anything about Alier internals. And in there, you can find mainly the dependencies that are needed to build your project. And this is the end of my introduction. Now I leave you with Fabien and Pierre-Marie. Try to turn it off. OK. So do you? So Pierre-Marie will be typing for me. Sorry, I'm going to try to fix that. OK. So the first demo is going to show how great package manager, especially Alier, is to start prototyping projects in Ada. So there are many libraries available on the web for Ada. But the fact that they are all in Alier makes them very easy to use. And so very easy to create a new project quickly. So the project that we are going to do is going to take and going to read a configuration file in a Tommel format and generate a PDF with a square in it. And the color of the square will depend on the configuration in the Tommel file. So first, we're going to start by creating a project. So Pierre-Marie will use the Alier init command, specifying bin because it's going to be unexecutable. Otherwise, it would be lib. So OK, you can create that. If you go demo effect. So yeah, you do have to, right now, you have to compile Alier yourself. Because we don't have binary release yet. And of course, you have to add it in your path. So the project is created now. So if you go to the My Project directory, so Alier is already creating some base files for us. So you can already do Alier build to compile it. That should work. So now I want to have a Tommel file as input. So I'm going to search in Alier to find if there's something available. So Alier list. So here, we use a local index to not rely on the network for this demo. So there's only what we need. Actually, we're missing a few characters on the left. But there's an Ada Tommel project here. So that's exactly what I need. So Pierre-Marie will have. Oh, what's going on? I'm doing. I wanted to acknowledge. Well, I think it's going to be OK. So yes. Right. Perfect. So now we want to use the Ada Tommel parser. So we are going to specify that it's a dependency of our project with the width command. So Alier with Ada Tommel. And so that's it. So here, everything is local. But otherwise, you would download the sources from the network. But here, everything is local. So now we can open the project file and add the dependency in the project file. So with Ada Tommel, that's it. OK. And now you can close and recompile. And now we can compile with the dependency. So Alier will also compile the Tommel library. And so now we can start working in our source file. And first, we will width the Ada Tommel package. Maybe Pierre-Marie, you can start copy past from the thing we prepared that would be easier. So yeah, we're going to width the Tommel file and also add a text to you to have some text output. OK. We're going to create a result variable. Actually, it's a constant. This is the result of opening a Tommel file. So that's the Ada Tommel API. And then the first if statement, we're going to check if we could open or not the Tommel file. So yeah. OK. So now we can go back to the command line and you can compile the project. OK. Everything works fine. And if you do Alier run, this will actually execute our program. And of course, we don't have any Tommel config file. So we see the error here. So now you can open config.tommel file, create a config.tommel file. And we are going to put some parameters in it. So we're going to set RGB values in floating points. So for instance, just r equals 0.5 and g equals 0, 0. And b equals 0, 0, for instance. So that's our Tommel configuration. So you can close. And if you run again, this time we should be able to load the Tommel. So now we have the ability to load a configuration very quickly. And now we want to have the possibility to export to a PDF. So we are going to look in the list of projects that we have in Ada Air. And we see that it's very nice. Thank you, Gauthier. We have a project to generate PDFs. So same procedure, Alaya with APDF. So now it's a dependency. We can open yet again the project file to add this in our project. No, I don't think the name is the same. Actually, you have to look on the PDF out, I think. Yeah, PDF, how's it? Yeah, so you can remove APDF. OK, nice. Now with the go back to the source file, we can copy pass the value. So here we are reading. So from the Tommel result, we are going to get the R, G, and B values. And convert to PDF output real types. So this is reading the configuration from the Tommel file. Yeah, to the end. And then we open. Yeah, we create a PDF. We set the color from the configuration. And we draw a rectangle. And we close the PDF. So if you save and do Alaya run, actually, because Alaya run, we'll also try to build before. And hopefully this is going to work. And if you open the PDF, we should have a somewhat red square. So that's it for the demo. Just to show you how quickly we can prototype stuff with Alaya. That's otherwise, it would have been possible before, but you would have to search on GitHub and download things. And you don't know to install them, et cetera, et cetera. With this, it's extremely quick to do so. So now to Pierre-Marie for now that you have benefited from the contribution of the community, how you can now contribute back. OK, thank you Fabien. So yes, we have this great project. And now we want to make it available for the outer world. So there are several steps to do it. So I won't do it here because I'm not going to be able to do it in the future. So I'm going to do it in the future. And I'm going to do it in the future. And I'm going to do it in the future. So I'm going to do it in the future. And I'm going to do it in the future. I won't do it here because I'm offline. But the step is to first clone the Git repository that contains every catalog of every AIDA project registered in Alaya. Then you add this index you make. Or it should be Alaya here. Three little acronyms. Anyway, you make Alaya aware of this index that you have cloned. And then you have to write some configuration files to describe the project that you want to make available to the outer world. So this file, so it's a Tommel file. Tommel is a syntax that looks like any files for those who know it. And it's very simple. But most importantly, so what data you have to put in the file is described in the documents that describe what you need to put there. And so yeah. So we'll do this in a moment. But just for what we have to do, so we want to put the name of the project that we want to contribute to. Some kind of text, free proposed text to describe what the project is about. We can put a website. We can give a list of authors. We have also a list of what we call maintainers. So it's the people. So you, when you write Tommel files in Alaya, it's you are a maintainer. You are the person not necessarily that's wrote the project, but the person who makes this project available to the other world. You are the maintainer. And yes, and really specific. So generally, software evolves. You don't want to. So when you publish a project, it's the first version. But you want sometimes to publish other versions, updates. And so in the index, you have one file that describes all the various releases. And so it's time to do the demo. OK, so as I said, I want to do the regular clone because I don't have internet here. But OK, so we have this nice project. And actually, the index, a fake version of the index, is here. So what does the index looks like? More like this. So each Tommel file describes one project that is made available. You have this file that is a kind of manifest. And here, well, this is not what you should have usually. I mean, these two archives are the sources of the project we want to contribute. You are not supposed to put them in the index. In the index, you put, you say, oh, OK, this source package for the release one of my project is, well, download it on GitHub from somewhere else. But here, we put there here just because of the demo effect, we don't want to rely on the internet, being able to reach the internet. All right, so I don't know the format by heart. And I think nobody should bother actually learning it. So I just take another something else as an example and write my own. So yes, first of all. So my project is called My Project. So I'll create a directory to put. All right, so I'm creating this file to describe My Project. So first of all, I have to put some general information about the project so I can put a description. Here we are. So who wrote this library? Well, it's Fabien. Thank you. You are the author. On the other hand, I am the maintainer. So because I'm the one writing the demo file. And something important, it's the logins. Because the so this is my login on GitHub. They're contributing to the community index on GitHub is special. We are making a proof so that when you write, when you contribute a project, you are the only one able to modify it in the future. And so putting my login here, make sure that future contributions to this file will be only I will be able to do them. All right, so now I give the list of project files that are part of this of my project. So here it's simple. All right, license. I don't think it's OK because we haven't chosen the license for your project. So no license. All right, and then so this is the first release of this magnificent project. So this is release 0.1. And so yes, I need to create a source package so that's a layer can get the sources from somewhere. So let's create a source package. I'll be right back. So my project is inside my project folder. So let's do this. I should have written if you want to do things right. OK, so we have a source package. Actually, I should have. Sorry about this. I should have removed the Allier directory in it because it's not supposed to be part of the sources. All right, so I will create my source package and then moving it to the index. Again, this specific part, you're not supposed to do it. You just publish a source archive somewhere on the internet. It's just fine. But here we don't have internet. With GitHub, it's really easy to push an archive on the repositories. All right. Really, that's what we recommend. I don't want to make typos. All right, so back to my description. So it's a local file. There I am. All right. So now my software is registered in the index. Let's try to actually use it. And when it is, oh, the maintainer should be in email. OK. So there's a lot of checks on what needs to be under required field, et cetera. So don't worry too much. We will check before we add your file in the index. And yes, something important. So I gave the source archive. But Alayr wants you to put some checks on. Integrate so that when it downloads the source, it needs to be sure that it's actually the exact source that was intended when the project was registered, the security check. So we have to compute 512 sums. So let's do this for my source archive. Where is it? OK. So this is the checksum. It's very secure. OK. So now I did the sum. So it's great. Alayr, no, it's not this one. Yeah, this one. So I have the sources and some sources. Now I should be able to build it. But no, no, I forgot an important step, which is telling Alayr that my project depends on other projects. So it's important so that Alayr, actually, when it gets my project, it also downloads the Adatomal project and the APDF one. So actually, it was wrong. So let's fix it. Let's fix this here. So how do we declare dependencies? Well, it's simple. We say something like this without typos. And we say, OK, so the release 0.1 of my project depends on, so it's Adatomal. And we depend on, so here we depend on version 1. And this is the kind of special syntax to give constraints about, because generally, you can depend on version 1.0 of a project. But this is also supposed to work with version 1.1, et cetera. You don't want to list every release possible. So there is a special DSL to express the dependencies. I won't cover it here. And so APDF, if I remember correctly, it's 5.0.0. I'm not sure. Let's try. Oh, but wait. I can ask Alayr. No, so I meant show. Yeah, show. APDF, its version currently. OK, I can read it here, but. Yeah, it's 5.0. Yeah, 5.0. Oh, yes, great. So it's 5. Not great. So this is my new index. Now let's try again to get the project and build it. I can use, I don't remember if it's build or compile. OK, thanks. And what's wrong? Could not translate the difference. No, I see. Oh, it's not supposed to. There is no. Oh, yes, right. Adatoml is not version 0.0. It's not 1.0.0. It's 0.1. Sorry about this. Yeah, so now the dependencies have been correctly set up. Alayr is able to properly set up the project. And now, yes, it worked. We have all outputs at APDF. OK, so it's more simple. There are several good shares and we are running out details. But this is a quick, that was a quick demo of how to contribute a project to the Outworld. You want to. Yeah, go finish with the website. Yes. Thank you. So as you can see, the process is a bit tedious to contribute. And that's why, as Alayr Andros said, that's one of the things we want to improve in 2020, make this process easier and quicker. So to end the presentation, I'm going to show you the prototype, or more or less proof of concept website that we have on. So it's at alayr.ada.dev. So this is the main page. It's actually a copy of the readme from the repository. So you have instructions to get started, how to compile Alayr, and how to start using it. Then you have two main pages. You have the crates, which is the list of crates available in the system. And you also have a search. So if we look at the crates, so here you have all the projects that are actually in Alayr available today. So you have the list here. And then we are going to open one of them. And so you have at the top, you have some, actually, the information that you saw, Pierre-Marie enter in the Tommel file. You can find it here. So we have the name. We have the short description, website, et cetera. And then you can also put a long description with a markdown format to provide information to your users, et cetera. So this one has no dependency. But the dependencies are also listed here. And you can click to navigate the dependency. You can also have tags to be able to search for other projects related to this one. And so that's going to be the last one. Actually, when you click on a tag, it's like searching in the search box. And you can see the, for instance, I typed game. And I see all the game-related crates available. And so when you contribute a crate to the index, it will automatically, every day, regenerate the website to have your crate available. And so I think that's it for our presentation. We are really excited about Alayr because we think it's a game changer for the ecosystem. And hopefully, it will make it a lot easier for people to collaborate with Ada. And so as Alejandro said, now we are in an open beta period. So we expect a lot of feedback from you all. And of course, new projects to put in the index. Thank you. Maybe I should add. Yes? No, if you want to, sorry. So if you want to check it out, go to the Alayr projects on GitHub. And so if you have issues, you can open issues directly on GitHub. And that was it. Yeah, that's the right way to give feedback is to go to this repository and open issues and even pull requests if you want to contribute. That would be great. Yeah, thank you, Pierre-Marie. Always useful. Thank you. Thank you. Do we have time for questions? Thank you. Next? Yes. So I'm starting here. As far as I remember, you were using the default GPR file that comes to the project with the engineer here. Right, so the question is, are we using the default GPR file that comes with each project? So yes, that's right. We try to not have specific requirements for Alayr in each project. So in theory, if you are already using GPR build to compile your project, it should work in Alayr as well. My actual question to this is, is it an option for you to make some restriction? And what can be in there? The problem with GPR is that it is near to impossible to overwrite some values that are defined inside the GPR file. So for example, if the developer says this is a dynamic library, it will always be a dynamic library. In some contexts, for example, you need a static library. So you have to write your completely own GPR file. OK, so the question is about configuration of the GPR build project. For instance, you can have variables to say that you want a static library or dynamic library. The answer is that you have some ways to declare those variables in the Tommel files, actually. So you specify in Alayr, you specify that this project has different options. And so they are visible from the Alayr point of view. You can also talk about this. Yeah, so actually, and that's the way. So in your Alayr Tommel file, you actually declare what are the variables from your project file. And then with Alayr build, you can specify them like you would do with GPR build. So it's, yeah? It depends on the library. The problem is that if you need a specific dependency and the dependency doesn't define what you need, you need the dependency with your project. For example, if you're targeting a specific platform. So I'm not sure where I'm going. So you just said if your dependency doesn't specify what you need, there's a problem. Well, we have this that we need to compile our dependencies with positioned independent executable. The library didn't define anything that we could tell the compiler, OK, compile this library with me. OK, so I think the answer is, I don't know, but maybe we can talk after because it's a bit complex. So there's also going to be, in my opinion, a discussion between people contributing libraries and people using them. So if you find a library in Alayr that doesn't have what you need, you should contact the maintainer and say, hey, maybe you should have this and for the next release, et cetera, et cetera. But so far, let's say we're not looking that much into the details of how things are built and so on and so forth. And also, yeah, we are relying on GPR builds. So if there's limitation with GPR builds, we have to deal with them. Oh, yes. Yes? Maybe on the fifth, I'd like to know, is there a plan to integrate the modifications and work with the GPR file you've heard? Because when you do Alayr with, why does it? Is there a reason why it doesn't add the with to the GPR file? And the other way around, if you create a new project and you already have a GPR file, it should determine the dependencies. At this point, the reason is that I don't like tools that modify my files. So when I did this, files that Alayr generates are as complete as possible, but my files, my project file, is not modified. We discussed sometimes about this. We might perhaps add some switch that you tell Alayr, OK, go ahead and modify my project file. I'm OK with that, for example. But that's the actual reason right now. I guess I can't really imagine somebody doing a Alayr with and then not adding a GPR file. Yeah, yeah, this happens. This happens. So yeah, one something specific as well is that sometimes from one Alayr crate, you will have several GPR files and you don't necessarily want to use all of them. So it's not we are living in an ecosystem where there are already projects out there and they do not necessarily fit perfectly the Alayr scheme. So there are things that are a bit different from the basic case that we show here, which is one project with one project file. Why is it to do? These GPR files, they are not listed. For me, it would be nice, A, if the GPR files were listed in the crate, what I can do with from that crate. And then maybe that, OK, if you do an Alayr with, it could tell you, if you want to start using the package, at least with something to your GPR file. OK. Because if we are targeting new users with the language, this is something that they will maybe start with. Yeah, that's a good suggestion. So yeah, you want to repeat? Yeah, the question was that when you do the Alayr with, it gets added to the dependencies, but the project file is not modified, so it won't build out of the box. So you have to manually add it to the GPR, to your own project file. And yes, the suggestion is to inform the user that the dependency that you just added has all those project files available for use. Cool. And, sir, second question. No, sorry. There was a second question that was, tell me if I'm wrong. Couldn't Alayr read an existing project file? And guess what packages should be added as dependencies? So it could, but you don't have the version information in the GPR file. So for instance, if your project file depends on the ADATOMAL library, which version should Alayr? We could add the heuristics and so on, but it's getting much more complex than the other. So it sounds nice as a feature. And useful, but it's not clear how it should work exactly. Yeah, but maybe this is more about the hints than the terms that we've taken in the past. Right. The hints could be definitely useful. And actually what you said about telling the users there are these and that project file available, actually we do have the list of project files in the Tommel. It's available. So that's, I think, yeah, that's something that's definitely doable. So I invite you actually to open an issue and share your feedback. Right. And provide the code. Yeah, if you want to implement it, that's fine as well. Yes. One question. Regarding the maintainer and your provide the object for Alayr, and there was the mentioning that the maintainer is an email login, it can't be changed. So once it declared to be the main channel, and then when you just kind of lose interest, what happens? So the question is about the. Is it somehow somebody else can take over? Yeah, I get it. So the question is about the maintainers and maintainers logins in the Tommel file. So we said that it's to make sure that you are the owner of the Tommel file and that you're the only one who can change it. Actually, what's happened? So we have a maintainer field with emails, because we want to be able to contact you at some point. We also have maintainers logins with GitHub logins, and that's actually for automated checks. So when you contribute to the Alayr index, you do a pull request, and there's a check that you are allowed to modify this file. But actually, if you want to transfer the ownership, you can modify the file to remove your name and put someone else's login. And that's how you would transfer the ownership. And so far, we'll see in the future, but so far everything is moderated. So we have a manual review. So even if someone disappears, we can decide to transfer the ownership at some point. Nothing is really set in stone for the maintainers. We can work around things like that. Yes? Do you plan to package Adadrivers library? OK, so the question is, do we plan to package Adadrivers library, which is a project for embedded development in Ada? The answer is yes, but the real question is how. Because I actually started, there's already embedded crates available, drivers for the SEMD51 microcontroller. The problem right now is that the architecture of the Adadrivers library project does not fit very well with Alayr, because it's not modular enough. So we have to find a good way to do it, but yes, absolutely, it will be in Ada here at some point. OK, I think that's it. Thank you. Thank you all. Thank you.
another one on how to contribute your projects to Ada world. So another more for the list. And then this talk. When this all started, and the publishing workflow. It's a bit, you can do it, terminology. And what kind of package manager is them very easy to use. And so very easy to create dependency. So Alier will also compile the Tommel create a PDF. We set the color from the Just to show you how quickly we can prototype from the contribution of the community, how you Adadrivers library, which is a project for