blog/assets/js/d309eaf6.cdb9989c.js
github-actions[bot] 0625929af4 deploy: 22a6099236
2024-06-19 16:09:34 +00:00

1 line
No EOL
31 KiB
JavaScript

"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6995],{54506:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var i=t(85893),s=t(11151);const o={title:"LTS distributions",description:"Shower thoughts on the LTS Linux distributions.\n",date:new Date("2024-02-07T00:00:00.000Z"),authors:[{key:"mf",title:"a.k.a. small Fedora maintainer"}],tags:["lts","linux distributions","support","paywall"],hide_table_of_contents:!1},a=void 0,r={permalink:"/blog/2024/02/07/lts-distros",editUrl:"https://github.com/mfocko/blog/tree/main/blog/2024-02-07-lts-distros.md",source:"@site/blog/2024-02-07-lts-distros.md",title:"LTS distributions",description:"Shower thoughts on the LTS Linux distributions.\n",date:"2024-02-07T00:00:00.000Z",formattedDate:"February 7, 2024",tags:[{label:"lts",permalink:"/blog/tags/lts"},{label:"linux distributions",permalink:"/blog/tags/linux-distributions"},{label:"support",permalink:"/blog/tags/support"},{label:"paywall",permalink:"/blog/tags/paywall"}],readingTime:14.515,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. small Fedora maintainer",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"LTS distributions",description:"Shower thoughts on the LTS Linux distributions.\n",date:"2024-02-07T00:00:00.000Z",authors:[{key:"mf",title:"a.k.a. small Fedora maintainer"}],tags:["lts","linux distributions","support","paywall"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"DevConf.cz 2024",permalink:"/blog/2024/06/19/devconf-2024"},nextItem:{title:"Mixed feelings on Rust",permalink:"/blog/2024/01/28/rust-opinion"}},h={authorsImageUrls:[void 0]},l=[{value:"Point of linux distributions",id:"point-of-linux-distributions",level:2},{value:"Pain of packaging",id:"pain-of-packaging",level:2},{value:"Packaging whole ecosystems",id:"packaging-whole-ecosystems",level:3},{value:"Paid distributions",id:"paid-distributions",level:2},{value:"Repository structure",id:"repository-structure",level:2},{value:"Ubuntu",id:"ubuntu",level:3},{value:"CentOS",id:"centos",level:3},{value:"Ubuntu Pro",id:"ubuntu-pro",level:2},{value:"RHEL ecosystem",id:"rhel-ecosystem",level:2},{value:"Change in the model",id:"change-in-the-model",level:3},{value:"Before the change",id:"before-the-change",level:4},{value:"After the change",id:"after-the-change",level:4},{value:"Open-source and paid support",id:"open-source-and-paid-support",level:2},{value:"Glossary",id:"glossary",level:2}];function c(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",mermaid:"mermaid",ol:"ol",p:"p",pre:"pre",section:"section",strong:"strong",sup:"sup",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Linux distributions are a common choice for running the servers. There's a wide\nvariety of distributions, but on the servers majority is made by only a few."}),"\n",(0,i.jsxs)(n.p,{children:["Some corporations also profit from the support of the \u201cbig\u201d distributions. Let's\ndive into the pros, cons and peculiarities of such ",(0,i.jsx)(n.em,{children:"business"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["This post is inspired/triggered by the following Mastodon post:\n",(0,i.jsx)(n.a,{href:"https://hackers.town/@antijingoist/111864760073049505",children:(0,i.jsx)(n.img,{src:"https://i.imgur.com/mh5RAlV.png",alt:"Mastodon post about Ubuntu Pro"})})]}),"\n",(0,i.jsx)(n.admonition,{title:"Disclaimer",type:"caution",children:(0,i.jsx)(n.p,{children:"You may take my opinion with a grain of salt, since I'm affiliated with Red Hat,\nbut at the same time I've also seen the other side of the fence, so I know how\nit works from the perspective of the provider/maintainer."})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If you are not very oriented in the matters of Linux distributions and\nmaintaining of packages, I suggest looking at the ",(0,i.jsx)(n.a,{href:"#glossary",children:"glossary"})," at the\nend to have a better grasp of the terms that are used throughout the post."]})}),"\n",(0,i.jsx)(n.h2,{id:"point-of-linux-distributions",children:"Point of linux distributions"}),"\n",(0,i.jsx)(n.p,{children:"First thing I'd like to point out is the point of the Linux distributions. What\nbenefit do they provide? And why there are so many of them\u2026"}),"\n",(0,i.jsxs)(n.p,{children:["As it has been brought up many times by the ",(0,i.jsx)(n.em,{children:"rms"}),(0,i.jsx)(n.sup,{children:(0,i.jsx)(n.a,{href:"#user-content-fn-1-e115ff",id:"user-content-fnref-1-e115ff","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})}),", Linux by itself is not\nenough, it's just the kernel that does the underlying work. We need more\nsoftware to utilize the hardware. That's the gap that Linux distributions bridge\nby providing the Linux and much more other software that we need."]}),"\n",(0,i.jsx)(n.p,{children:"Each distribution is unique in its own way. Some prefer different ways of\nhandling the software (like Gentoo that allows you to compile it yourself) and\nothers stable releases of software (like Debian)."}),"\n",(0,i.jsx)(n.p,{children:"In the end it mostly boils down to the packaging. I, as a user, want to do\nsomething like"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"$ sudo dnf5 install firefox\n"})}),"\n",(0,i.jsx)(n.p,{children:"and not bother about anything else. I don't want to open browser to look the\nthing up, download it and then click mindlessly 500\xd7 \u201cNext\u201d. I just want to run\none command and when the maintainers decide it's time to move on, another one to\nupgrade the software to the newer version."}),"\n",(0,i.jsx)(n.p,{children:"Of course, for some use cases you want to minimize the latter. And even make\nsure that it's safe to do it when you need to. You don't want to break your\nproduction deployment just because someone decided it's time to push something\nout."}),"\n",(0,i.jsxs)(n.p,{children:["That's when the ",(0,i.jsx)(n.em,{children:"maintainers"})," come in. They take upon themselves the\nresponsibility of maintaining the packages. If you've ever used the Debian, you\nknow very well how ",(0,i.jsx)(n.em,{children:"old"})," the software is, but that's what you might need for\nyour servers."]}),"\n",(0,i.jsx)(n.h2,{id:"pain-of-packaging",children:"Pain of packaging"}),"\n",(0,i.jsxs)(n.p,{children:["Packaging software ",(0,i.jsx)(n.em,{children:"is not"})," cost-free. You may as well have 80 % of packages\nthat don't need much care and it's rather easy to push them forward, but those\nremaining, which are complicated and raise issues regularly, will make it up and\ntake a lot of time and also pain."]}),"\n",(0,i.jsxs)(n.p,{children:["Libraries are the most common example that might not need much work to be done.\nOn the other hand, Linux kernel itself is a rather complicated machinery that\nis patched ",(0,i.jsx)(n.strong,{children:"a lot"})," and its build process is not simple either."]}),"\n",(0,i.jsxs)(n.p,{children:["Even if you consider just those ",(0,i.jsx)(n.em,{children:"easily-maintainble"})," packages, the process can\nbe tedious, boring and overall time consuming."]}),"\n",(0,i.jsx)(n.admonition,{title:"Shameless RHEL-based ecosystem plug",type:"tip",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://packit.dev/",children:"Packit"})," can help tremendously with the ",(0,i.jsx)(n.em,{children:"easily-maintainable"})," packages, since it\n",(0,i.jsx)(n.strong,{children:"can"})," be automated."]})}),"\n",(0,i.jsx)(n.h3,{id:"packaging-whole-ecosystems",children:"Packaging whole ecosystems"}),"\n",(0,i.jsx)(n.p,{children:"Now it's time to talk about whole ecosystems that have some kind of a packaging\nby themselves. Yes, I mean Python (with its continuous stream of different\npackage managers), Rust, Go, etc."}),"\n",(0,i.jsxs)(n.p,{children:["Whole point of packaging is to have some form of ",(0,i.jsx)(n.em,{children:"gating"}),". In other words, you\nwant some kind of ",(0,i.jsx)(n.em,{children:"quality control"})," when pushing changes into the Linux distros."]}),"\n",(0,i.jsx)(n.p,{children:"If you want to package some tool (or even library) from the aforementioned\necosystems, you need to package all of the dependencies to make sure something\ndoesn't get updated in the meantime (and also that you can safely reproduce the\nbuilds, if need be)."}),"\n",(0,i.jsxs)(n.p,{children:["I've tried to package some utilities for EPEL both in Rust and Go. Dependencies\nform a DAG",(0,i.jsx)(n.sup,{children:(0,i.jsx)(n.a,{href:"#user-content-fn-2-e115ff",id:"user-content-fnref-2-e115ff","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})})," and in case of Rust, it's ",(0,i.jsx)(n.em,{children:"very"})," similar to the way ",(0,i.jsx)(n.code,{children:"npm"})," does\nits packaging."]}),"\n",(0,i.jsx)(n.admonition,{title:"Spoiler alert",type:"danger",children:(0,i.jsxs)(n.p,{children:["You get a lot of dependencies. And since it's a tree of dependencies, there may\nbe ",(0,i.jsx)(n.strong,{children:"a lot"})," of them."]})}),"\n",(0,i.jsxs)(n.p,{children:["I have no clue how do the Rust maintainers operate, but I'm tipping my fedora in\ntheir direction, since it must be a ",(0,i.jsx)(n.em,{children:"pain in the ass"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"paid-distributions",children:"Paid distributions"}),"\n",(0,i.jsx)(n.p,{children:"You can find few Linux distributions that are \u201cpaid\u201d. I'm very well aware of the\nfact I've used quotes around the word, cause it's not that easy and not even\nsame for all of the distributions that involve some kind of a payment."}),"\n",(0,i.jsxs)(n.p,{children:["One of the first non-free distributions I've come into contact was ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.a,{href:"https://zorin.com/os/pro/",children:"Zorin OS"})}),"\nwhich basically tries to be the best ",(0,i.jsx)(n.em,{children:"transition"})," solution when moving away from\nthe Windows or macOS. If you have a look at the ",(0,i.jsx)(n.em,{children:"perks"})," of its ",(0,i.jsx)(n.em,{children:"Pro"})," version\nthat's paid, you may as well decide they are rather questionable\u2026"]}),"\n",(0,i.jsxs)(n.p,{children:["It's time to move into the ",(0,i.jsx)(n.em,{children:"Ubuntu Pro"}),", ",(0,i.jsx)(n.em,{children:"RHEL"})," and ",(0,i.jsx)(n.em,{children:"SLE"})," territory. What's the\npoint of those? They definitely offer different kind of, let's say,\n",(0,i.jsx)(n.em,{children:"non-free experience"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"With those you are paying mainly for the support and bug/security patches."}),"\n",(0,i.jsx)(n.admonition,{title:"Fun fact",type:"tip",children:(0,i.jsxs)(n.p,{children:["There's no mention of any kind of support on the Zorin page\u2026 Apart from the fact\nthat ",(0,i.jsx)(n.em,{children:"you are supporting"})," the Zorin development."]})}),"\n",(0,i.jsx)(n.h2,{id:"repository-structure",children:"Repository structure"}),"\n",(0,i.jsxs)(n.p,{children:["As I have mentioned above, the three ",(0,i.jsx)(n.em,{children:"services"}),(0,i.jsx)(n.sup,{children:(0,i.jsx)(n.a,{href:"#user-content-fn-3-e115ff",id:"user-content-fnref-3-e115ff","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})," I mentioned are providing\nsupport with regards to bugs and security vulnerabilites. Therefore it makes\nsense to have some kind of a process in place when you're pushing changes\n(either updates, patches or ",(0,i.jsx)(n.em,{children:"security"})," patches) to the distribution. And yes,\nthese processes are ",(0,i.jsx)(n.em,{children:"in place"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["If you think about the amount of packages that is present in the community\ndistributions like ",(0,i.jsx)(n.em,{children:"archLinux"})," (14,830 packages) or ",(0,i.jsx)(n.em,{children:"Fedora"})," (74,309 packages),\nit is safe to come to a conclusion that ",(0,i.jsx)(n.em,{children:"there's no way"})," to support all of them."]}),"\n",(0,i.jsx)(n.admonition,{title:"archLinux",type:"tip",children:(0,i.jsxs)(n.p,{children:["It may seem that archLinux contains rather small set of packages, but one of the\n",(0,i.jsx)(n.em,{children:"killer features"})," of archLinux lies in the AUR (archLinux User Repository) where\nyou can find additional ",(0,i.jsx)(n.strong,{children:"93,283"})," packages."]})}),"\n",(0,i.jsxs)(n.p,{children:["That's why the Linux distributions have some structure to their repositories\nthat contain packages. The way you go around this is rather simple, you choose\nsome set of ",(0,i.jsx)(n.em,{children:"critical"})," packages that you guarantee support for (like Linux\nkernel, openSSL, etc.) and maintain those with all the QA processes in place."]}),"\n",(0,i.jsx)(n.admonition,{title:"Unpopular opinion",type:"caution",children:(0,i.jsxs)(n.p,{children:["This is also one of the reasons why I'm quite against packaging anything and\neverything into the Linux distribution. In my opinion it is impossible to\n",(0,i.jsx)(n.strong,{children:"properly"})," maintain ",(0,i.jsx)(n.strong,{children:"huge"})," set of packages and enforce some kind of\n",(0,i.jsx)(n.strong,{children:"quality control"}),"."]})}),"\n",(0,i.jsx)(n.h3,{id:"ubuntu",children:"Ubuntu"}),"\n",(0,i.jsx)(n.p,{children:"Ubuntu has pretty granular structure of their repositories, namely:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"main"})," containing the \u201ccore\u201d of the Ubuntu that is maintained by the Canonical,"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"universe"})," containing literally the \u201cuniverse\u201d, packages that everyone likes,\nbut they're not crucial, this repo is maintained mostly by the community,"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"multiverse"})," containing packages with some license or copyright issues, and"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"restricted"})," containing ",(0,i.jsx)(n.em,{children:"proprietary"})," packages like nvidia drivers and such."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"By briefly checking my Ubuntu 23.10 installation, here are stats of packages in\ntheir respective repositories:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"main"})," with 6,128 packages,"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"universe"})," with 63,380 packages,"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"multiverse"})," with 997 packages, and finally"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"restricted"})," with 784 packages."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"As you can see, if we sum them up, they are relatively similar to the Fedora\nnumbers."}),"\n",(0,i.jsx)(n.h3,{id:"centos",children:"CentOS"}),"\n",(0,i.jsx)(n.p,{children:"CentOS on the other hand has a bit simpler structure with BaseOS for the base\nand AppStream for additional packages:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"baseos"})," with 1,058 packages,"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"appstream"})," with 5,646 packages, and"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"extras-common"})," with 42 packages."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Overall they make up the similar number as the Ubuntu's ",(0,i.jsx)(n.code,{children:"main"})," repository. And\nyou can also notice that there are no additional repositories."]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsx)(n.p,{children:"There's also a CRB (CodeReady Builder) repository with dev packages like headers\nand such."}),(0,i.jsx)(n.p,{children:"And you can also enable EPEL (Extra Packages for Enterprise Linux) which is\ncommunity-supported and provides another 19,903 packages."})]}),"\n",(0,i.jsx)(n.h2,{id:"ubuntu-pro",children:"Ubuntu Pro"}),"\n",(0,i.jsx)(n.p,{children:"Now it's time to get back to the Ubuntu Pro. There are multiple points that need\nto be taken in account to be either positive or negative about it\u2026"}),"\n",(0,i.jsx)(n.p,{children:"We can start with the way Ubuntu is released and maintained. Ubuntu has regular\n6-month release cycle and biannual LTS release. Releases are normally supported\nfor 9 months with the exception of the LTS releases being supported for 5 years."}),"\n",(0,i.jsxs)(n.p,{children:["If you check out the ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.a,{href:"https://ubuntu.com/pro/",children:"Ubuntu Pro"})})," website, you can find the following\nstatement:"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Ubuntu Pro"})}),"\n",(0,i.jsx)(n.p,{children:"The most comprehensive subscription for open-source software security"}),"\n",(0,i.jsx)(n.p,{children:"30-day trial for enterprises. Always free for personal use."}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"Personal use",type:"tip",children:(0,i.jsxs)(n.p,{children:["Ubuntu Pro for ",(0,i.jsx)(n.em,{children:"personal use"})," consists of 5 installations and in case of the\ncommunity ",(0,i.jsx)(n.em,{children:"ambassadors"})," 50."]})}),"\n",(0,i.jsx)(n.p,{children:"Overall if you try to find what is included in the Ubuntu Pro:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"high and critical patches,"}),"\n",(0,i.jsx)(n.li,{children:"10 years of maintenance, and"}),"\n",(0,i.jsx)(n.li,{children:"(optional) 24/7 enterprise-grade support."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["If we get back to the screenshot all the way at the beginning of the post:\n",(0,i.jsx)(n.a,{href:"https://hackers.town/@antijingoist/111864760073049505",children:(0,i.jsx)(n.img,{src:"https://i.imgur.com/mh5RAlV.png",alt:"Mastodon post about Ubuntu Pro"})})]}),"\n",(0,i.jsxs)(n.p,{children:["and try to look up to which repository the packages mentioned in the screenshot\nbelong, we will find out that they belong to ",(0,i.jsx)(n.code,{children:"universe"})," repository which is\nmaintained by the community. Not to mention nature of the packages: multimedia."]}),"\n",(0,i.jsx)(n.p,{children:"You may think about this as a scam, but considering repository consisting of 70k\npackages, it is not an easy task to do. And with LTS releases we're talking\nabout 5+ years of support."}),"\n",(0,i.jsx)(n.admonition,{title:"Fedora",type:"info",children:(0,i.jsx)(n.p,{children:"Try to compare this state to Fedora. It also has a 6-month release cycle, but\nthere are no LTS releases and each release is supported only for a year."})}),"\n",(0,i.jsxs)(n.p,{children:["Common strategy, at this point, is to pull out the ",(0,i.jsx)(n.em,{children:"open-source"}),". Yes, we are\nstill dealing with the open-source, but keep in mind that you're trying to patch\nsome issue in a version that's 5 years old, upstream definitely doesn't care\nanymore",(0,i.jsx)(n.sup,{children:(0,i.jsx)(n.a,{href:"#user-content-fn-4-e115ff",id:"user-content-fnref-4-e115ff","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"4"})}),", the development didn't stop 5 years ago, it's going on and fixing\nthis issue in a release from 5 years is not the same as fixing it in the current\nrelease. At this point, if you are paying for such support, you are actually\npaying for someone to do ",(0,i.jsx)(n.em,{children:"software archaeology"})," which ",(0,i.jsx)(n.strong,{children:"can be"})," ",(0,i.jsx)(n.em,{children:"non-trivial"}),"\nto do."]}),"\n",(0,i.jsxs)(n.p,{children:["In the case of Ubuntu Pro we're talking about community support and best-effort\nsupport by Canonical for the paying customers. And that makes sense to me,\nrunning LTS distro for 5+ years on a desktop seems like an odd choice, even\nwith the help of ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.a,{href:"https://podman.io/",children:"podman"})})," and ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.a,{href:"https://distrobox.it/",children:"distrobox"})})," or ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.a,{href:"https://containertoolbx.org/",children:"toolbx"})})," that allow us to use\nstable or LTS distro as a base and containerized development environments on top\nof that."]}),"\n",(0,i.jsx)(n.h2,{id:"rhel-ecosystem",children:"RHEL ecosystem"}),"\n",(0,i.jsx)(n.p,{children:"RHEL ecosystem is much more complicated in this matter. However it's very\nsimilar to the way SUSE operates with few exceptions."}),"\n",(0,i.jsx)(n.p,{children:"You can see a flow diagram here:"}),"\n",(0,i.jsx)(n.mermaid,{value:"flowchart LR;\n U[upstream] --\x3e FR[Fedora Rawhide];\n FR --\x3e F[Fedora release];\n F --\x3e C[CentOS Stream];\n C --\x3e R[RHEL];"}),"\n",(0,i.jsx)(n.p,{children:"Key things to take and not to take from the flow diagram:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"getting from one upstream to its respective downstream is not as simple as the\npresence of an arrow and it's not the same process for all of them"}),"\n",(0,i.jsxs)(n.li,{children:["lengths of the arrows are not proportional, specifically:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Fedora Rawhide is ",(0,i.jsx)(n.em,{children:"supposed to"})," consume updates as soon as possible,"]}),"\n",(0,i.jsxs)(n.li,{children:["depending on the decision of the maintainer they can, but ",(0,i.jsx)(n.em,{children:"don't have to"})," be\nincluded in the currently supported Fedora releases (you can take ",(0,i.jsx)(n.a,{href:"https://src.fedoraproject.org/rpms/emacs/",children:"Emacs"})," as\nan example of such package), but Rawhide eventually becomes the next Fedora\nrelease,"]}),"\n",(0,i.jsx)(n.li,{children:"CentOS Stream gets branched off a specific Fedora release, and then"}),"\n",(0,i.jsxs)(n.li,{children:["ultimately CentOS Stream becomes the next ",(0,i.jsx)(n.strong,{children:"minor"})," release of RHEL."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["this diagram is simplified by ",(0,i.jsx)(n.strong,{children:"a lot"})]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"SUSE flow for comparison",type:"tip",children:[(0,i.jsx)(n.p,{children:"I'll also include a SUSE flow, so you can compare:"}),(0,i.jsx)(n.mermaid,{value:"flowchart LR;\n U[upstream] --\x3e T[openSUSE Tumbleweed];\n T --\x3e L[openSUSE Leap];\n L --\x3e S[SUSE Linux Enterprise];\n S --\x3e L;"}),(0,i.jsx)(n.p,{children:"You can notice, as opposed to the RHEL ecosystem, some changes are being\nbackported to the openSUSE Leap."}),(0,i.jsxs)(n.p,{children:["However this is subject to change as there is a new ",(0,i.jsx)(n.a,{href:"https://susealp.io/",children:"ALP"})," project arising which\nis, more than likely, going to replace the Leap."]})]}),"\n",(0,i.jsx)(n.h3,{id:"change-in-the-model",children:"Change in the model"}),"\n",(0,i.jsx)(n.p,{children:"The flow I've shown above is in effect since late \u201820 and early \u201821. I hope you\ncan see that it is quite similar to the way SUSE operates too. Before late \u201820\nthe flow was following:"}),"\n",(0,i.jsx)(n.mermaid,{value:"flowchart LR;\n U[upstream] --\x3e FR[Fedora Rawhide];\n FR --\x3e F[Fedora release];\n F --\x3e R[RHEL];\n R --- C[CentOS];"}),"\n",(0,i.jsx)(n.p,{children:"CentOS was the last distribution in that \u201cchain\u201d. This provides some benefits\nand some negatives."}),"\n",(0,i.jsx)(n.h4,{id:"before-the-change",children:"Before the change"}),"\n",(0,i.jsx)(n.p,{children:"From the point of a developer, unless you have some kind of an early access to\nRHEL, you don't see the changes until they land and are already released. This\nimpairs your ability to test and verify your software before shipping it to your\nclients that use RHEL."}),"\n",(0,i.jsx)(n.p,{children:"From the point of a user, there is one positive, you basically get \u201cfree RHEL\u201d\nwithout the support. This also allowed you to report bugs against the RHEL,\nsince they were 1:1 distros (minus the branding and support). So you'd\ntechnically get RHEL free of charge."}),"\n",(0,i.jsx)(n.p,{children:"Benefit of such project, except for the cost, is questionable. The main issue,\nwhich actually became even more apparent after changing the flow, is someone\nelse repackaging your own product and selling it again."}),"\n",(0,i.jsx)(n.h4,{id:"after-the-change",children:"After the change"}),"\n",(0,i.jsxs)(n.p,{children:["First of all, the current flow counters the issue mentioned above. You can test\nyour projects against the ",(0,i.jsx)(n.em,{children:"next minor RHEL release"}),". CentOS Stream is free, so\nyou can freely incorporate it into your CI pipelines."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Shameless plug pt. 2",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Again, ",(0,i.jsx)(n.a,{href:"https://packit.dev/",children:"Packit"})," can help you on upstream to verify that you're not breaking your\nRPM builds and on top of that you can also use ",(0,i.jsx)(n.a,{href:"https://docs.testing-farm.io/Testing%20Farm/0.1/index.html",children:"Testing Farm"})," to run tests on a\nspecific Fedora or CentOS Stream releases."]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Green tests may not be green everywhere and catching such issues as soon as\npossible costs much less than catching them further down the chain."}),"\n"]})]}),"\n",(0,i.jsxs)(n.p,{children:["There are many people thinking that RHEL has become closed-source. It is not.\nThe development happens ",(0,i.jsx)(n.em,{children:"out in the open"}),", it's more open that it was before.\nHowever with the cost of not getting the exact same thing for free. You can get\nthe next minor RHEL, not the same that's normally paid for. ",(0,i.jsx)(n.a,{href:"https://packit.dev/",children:"Packit"})," is an\nexample of a service that is deployed on the CentOS 9 Stream and even used to be\ndeployed on Fedora, but the regular 6-month release cycle caused some minor\nissues here and there."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"Production-ready"})," is something that heavily depends on the context\u2026"]}),"\n",(0,i.jsx)(n.admonition,{title:"Free \u201cclones\u201d",type:"tip",children:(0,i.jsxs)(n.p,{children:["After this change so-called ",(0,i.jsx)(n.em,{children:"free \u201cclones\u201d"})," emerged. I have to admit that in\ncase of ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.a,{href:"https://almalinux.org/",children:"AlmaLinux"})})," I can see some benefits e.g., pushing for live images and\nsupport of various desktop environments, Raspberry Pi support or even WSL images\nbeing present in the M$ Store and easy to install."]})}),"\n",(0,i.jsx)(n.h2,{id:"open-source-and-paid-support",children:"Open-source and paid support"}),"\n",(0,i.jsxs)(n.p,{children:["Overall I don't think that paying for the support of 5 years old ",(0,i.jsx)(n.em,{children:"non-critical"}),"\npackages is going against the open-source. It is a non-trivial work that, in\nmajority of cases, cannot be included in the upstream, therefore the benefit is\nreapt only by the paying customers. I have to admit that in the case of the\nUbuntu Pro it may seem a bit weird (hiding patches behind the paywall). However\nwe're still talking about rather big set of packages that will affect a minority\nof server workloads, if any."]}),"\n",(0,i.jsx)(n.h2,{id:"glossary",children:"Glossary"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"rolling release"})," - continuously released without \u201csignificant milestones\u201d"]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsx)(n.p,{children:"As an example of rolling distribution you can take archLinux, openSUSE\nTumbleweed, Fedora Rawhide, or even CentOS 9 Stream."}),(0,i.jsxs)(n.p,{children:["As en example of ",(0,i.jsx)(n.strong,{children:"not"})," rolling distribution you can take Ubuntu, openSUSE\nLeap or Fedora."]})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"bleeding edge"})," - contains the latest versions as they are released on the\nupstream"]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["As an example you can take archLinux, openSUSE Tumbleweed or Fedora Rawhide.\nYou can also notice how common it is to combine ",(0,i.jsx)(n.em,{children:"rolling release"})," with\n",(0,i.jsx)(n.em,{children:"bleeding edge"}),"."]})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"upstream"})," & ",(0,i.jsx)(n.em,{children:"downstream"})]}),"\n",(0,i.jsx)(n.p,{children:"You're most likely to meet these terms in the meaning of upstream being the\nproject itself and downstream being the packaging of said project in some\ndistribution."}),"\n",(0,i.jsxs)(n.p,{children:["However this can also apply to distributions like ",(0,i.jsx)(n.em,{children:"openSUSE Tumbleweed"})," with\n",(0,i.jsx)(n.em,{children:"openSUSE Leap"}),", ",(0,i.jsx)(n.em,{children:"Fedora"})," with ",(0,i.jsx)(n.em,{children:"CentOS Stream"}),", or even ",(0,i.jsx)(n.em,{children:"CentOS Stream"})," with\n",(0,i.jsx)(n.em,{children:"RHEL"}),". This basically means that the packages/software is being released into\nthe upstream (Tumbleweed, Fedora, or even CentOS) and then after being tested\nis taken further down into their respective downstreams (Leap, CentOS, RHEL)."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.section,{"data-footnotes":!0,className:"footnotes",children:[(0,i.jsx)(n.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{id:"user-content-fn-1-e115ff",children:["\n",(0,i.jsxs)(n.p,{children:["Richard Stallman ",(0,i.jsx)(n.a,{href:"#user-content-fnref-1-e115ff","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{id:"user-content-fn-2-e115ff",children:["\n",(0,i.jsxs)(n.p,{children:["directed acyclic graph ",(0,i.jsx)(n.a,{href:"#user-content-fnref-2-e115ff","data-footnote-backref":"","aria-label":"Back to reference 2",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{id:"user-content-fn-3-e115ff",children:["\n",(0,i.jsxs)(n.p,{children:["Ubuntu Pro is technically a service whereas the RHEL and SLE are distros\nwith the support included. ",(0,i.jsx)(n.a,{href:"#user-content-fnref-3-e115ff","data-footnote-backref":"","aria-label":"Back to reference 3",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{id:"user-content-fn-4-e115ff",children:["\n",(0,i.jsxs)(n.p,{children:["There are upstream projects that keep LTS branches, such as Linux kernel,\nbut even in the case of the kernel itself, they're planning on ending it,\nsince the cost outweighs the benefits at this point. ",(0,i.jsx)(n.a,{href:"#user-content-fnref-4-e115ff","data-footnote-backref":"","aria-label":"Back to reference 4",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>a});var i=t(67294);const s={},o=i.createContext(s);function a(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]);