{"id":468,"date":"2023-06-18T11:20:20","date_gmt":"2023-06-18T11:20:20","guid":{"rendered":"https:\/\/blogs.gentoo.org\/gsoc\/?p=468"},"modified":"2023-06-18T11:20:20","modified_gmt":"2023-06-18T11:20:20","slug":"bonding-period-1-modernization-of-portage","status":"publish","type":"post","link":"https:\/\/blogs.gentoo.org\/gsoc\/2023\/06\/18\/bonding-period-1-modernization-of-portage\/","title":{"rendered":"Bonding period 1 &#8211; Modernization of Portage"},"content":{"rendered":"<h1 id=\"bonding-period-1---modernization-of-portage\">Bonding period 1 &#8211; Modernization of Portage<\/h1>\n<p>Hello everyone,<\/p>\n<p>I am Berin Aniesh, one of the four contributors for Gentoo through GSOC 2023. You can read more about us <a href=\"https:\/\/blogs.gentoo.org\/gsoc\/2023\/05\/05\/gentoo-google-summer-of-code-gsoc-for-2023\/\">here<\/a>. In this post, I want to talk about the project I am working on and the first two\u00a0 weeks of the community bonding period<\/p>\n<h2 id=\"title-and-project-scope\">Title and Project Scope<\/h2>\n<p>The title of the project is \u201cModernization of portage codebase by refactoring and rewriting performance critical parts as C++ extensions\u201d.<\/p>\n<p>Portage is probably the most versatile package manager on the planet and this has been its boon and bane at the same time This versatility combined with portage\u2019s feature richness has made it possible for not only gentoo users, but projects like chromium OS, Flatcar container linux, a numerous downstream projects and many more. In linux, it can support any underlying stack (eg. glibc vs musl, hardened systems, systemd vs openrc, etc). Other than linux, it can also run on BSD and MacOS. It supports compile time feature selection through<code> USE<\/code> flags. Taking all these factors into\u00a0 account, together with the fact that portage supports numerous architectures, seeing portage\u00a0 perform its duties as it was designed to is a huge feat of engineering. And above all, everything of\u00a0 portage is written by passionate volunteers. If anything, understanding the landscape of gentoo has\u00a0 brought me huge respect towards the gentoo developers and the community.<\/p>\n<h2 id=\"community\">Community<\/h2>\n<p>My time in the community bonding period was spent, well, bonding with the community,\u00a0 understanding the spread of gentoo and studying the codebase.<\/p>\n<p>Gentoo community is one of the most knowledgeable and welcoming of the linux communities.\u00a0 Gentoo is different from other linux distros in the fact that it urges the community to contribute.\u00a0 This combined with the patience needed to run gentoo as a daily driver has brought together a community, that is mature, knowledgeable and composed. I learnt so many things, trivial and non\u00a0 trivial just by hanging around in #gentoo-chat of libera.chat. If anyone reading this has not\u00a0 participated in #gentoo-chat, I really insist that you to have a look around in your free time.<\/p>\n<h3 id=\"setting-up-an-irc-bouncer\">Setting up an IRC Bouncer<\/h3>\n<p>Though mailing lists exist, the main mode of communication for most things gentoo is through\u00a0 IRC. There is just one small problem. IRC doesn\u2019t work like other modern chat applications, there\u00a0 is no centralized server to save our messages. Someone can\u2019t drop us a message and expect it to get delivered all the time. The recipient has to be online at the time of sending to receive the message. This is not feasible and so we have to setup something called an IRC bouncer, which stays online\u00a0 24\/7, gets messages on our behalf, stores it and and relays the message to us when we are online.\u00a0 We have two options, find a managed bouncer service or self host one and you guessed it, I of\u00a0 course went with the self hosting method.<\/p>\n<p>Setting up the bouncer was not so easy as it is a combination of many technologies which work\u00a0 together. There are so many options to choose from and each choice only documents its very\u00a0 specific job. I had to learn about the overview of IRC servers and clients, their interworking, websockets, SSL, nginx and many more. At the end, with a lot of help from #gentoo-chat and my\u00a0 friend catcream, I did manage to setup a bouncer on linode with <code>soju<\/code> from emersion and his IRC client, <code>gamja<\/code>.<\/p>\n<p>Though the process is painful, I think it was worth the effort. Chatting using the bouncer I setup is\u00a0 indeed very satisfying.<\/p>\n<h2 id=\"getting-familiar-with-the-codebase\">Getting familiar with the codebase<\/h2>\n<p>Portage is a huge codebase with a lot of intertwined functions and getting familiar with nearly\u00a0 twenty years of work is no easy task. The mentors understood this and helped in every way\u00a0 possible. Other than reading the codebase, my mentor Mr. Sam James suggested that I try fixing a\u00a0 few bugs so that I get familiar with the codebase. I\u2019ll be searching the <a href=\"https:\/\/bugs.gentoo.org\/describecomponents.cgi?product=Portage%20Development\">bugzilla<\/a> for simpler bugs,\u00a0 which are easy to fix and fixing them. That would be the plan for the next two weeks.<\/p>\n<h2 id=\"summary\">Summary<\/h2>\n<p>So, in the first two weeks of the community bonding period,<\/p>\n<ul>\n<li>I got familiar with the community and made a lot of friends<\/li>\n<li>I am getting to know about the places where portage is used<\/li>\n<li>I am getting familiar with the portage codebase.<\/li>\n<\/ul>\n<p>That marks the end of two weeks into GSOC. I have been thoroughly enjoying my time at gentoo. I am thankful for the opportunity and I hope to make some meaningful contribution to gentoo in\u00a0 the upcoming weeks.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bonding period 1 &#8211; Modernization of Portage Hello everyone, I am Berin Aniesh, one of the four contributors for Gentoo through GSOC 2023. You can read more about us here. In this post, I want to talk about the project &hellip; <a href=\"https:\/\/blogs.gentoo.org\/gsoc\/2023\/06\/18\/bonding-period-1-modernization-of-portage\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":180,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[16,19],"tags":[3,24],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/posts\/468"}],"collection":[{"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/users\/180"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/comments?post=468"}],"version-history":[{"count":1,"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/posts\/468\/revisions"}],"predecessor-version":[{"id":469,"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/posts\/468\/revisions\/469"}],"wp:attachment":[{"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/media?parent=468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/categories?post=468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/gsoc\/wp-json\/wp\/v2\/tags?post=468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}