CINXE.COM

ZzMzaw's blog • Choosing an OS according to expectations and security threats

<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="width=device-width,initial-scale=1.0" name=viewport><meta content=https://zzmzaw.github.io name=base><title>ZzMzaw's blog • Choosing an OS according to expectations and security threats</title><link title="ZzMzaw's blog - Atom Feed" href=https://zzmzaw.github.io/atom.xml rel=alternate type=application/atom+xml><link href="https://zzmzaw.github.io/custom_subset.css?h=0b9535a28bc3d5bf2321" rel=stylesheet><link href="https://zzmzaw.github.io/main.css?h=4a3dff148c520f191505" rel=stylesheet><link href="https://zzmzaw.github.io/misc.css?h=9b0f483dae9c0c16a211" rel=stylesheet><link href="https://zzmzaw.github.io/cc.css?h=47dd58492ac53967cae5" rel=stylesheet><link href="https://zzmzaw.github.io/series.css?h=e60f43ddd4c582055a83" rel=stylesheet><link href="https://zzmzaw.github.io/skins/lavender.css?h=31ee0a710ed660d122f6" rel=stylesheet><meta content="light dark" name=color-scheme><meta content="A quick definition of my expectations and threats regarding operating systems and the choice of the one that might best meet them, at least on paper" name=description><meta content="A quick definition of my expectations and threats regarding operating systems and the choice of the one that might best meet them, at least on paper" property=og:description><meta content="Choosing an OS according to expectations and security threats" property=og:title><meta content=article property=og:type><meta content=fr_FR property=og:locale:alternate><link href=https://zzmzaw.github.io/fr/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/ hreflang=fr rel=alternate><meta content=en_GB property=og:locale:alternate><link href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/ hreflang=en rel=alternate><meta content=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/ property=og:url><meta content="ZzMzaw's blog" property=og:site_name><meta content="default-src 'self';font-src 'self' data:;img-src 'self' https://* data:;media-src 'self' https://cdn.jsdelivr.net/;style-src 'self';connect-src 'self';script-src 'self' 'self'" http-equiv=Content-Security-Policy><noscript><link href=https://zzmzaw.github.io/no_js.css rel=stylesheet></noscript><script src=https://zzmzaw.github.io/js/initializeTheme.min.js></script><script defer src=https://zzmzaw.github.io/js/themeSwitcher.min.js></script><script src="https://zzmzaw.github.io/js/searchElasticlunr.min.js?h=3626c0ef99daa745b31e" defer></script><body><header><nav class=navbar><div class=nav-title><a class=home-title href=https://zzmzaw.github.io>ZzMzaw's blog</a></div><div class=nav-navs><ul><li><a class="nav-links no-hover-padding" href=https://zzmzaw.github.io/posts/> posts </a><li><a class="nav-links no-hover-padding" href=https://zzmzaw.github.io/archive/> archive </a><li><a class="nav-links no-hover-padding" href=https://zzmzaw.github.io/tags/> tags </a></li><div class=nav-navs id=menu-icons-group><li class=js><div aria-label="Click or press $SHORTCUT to open search" class="search-icon interactive-icon" title="Click or press $SHORTCUT to open search" id=search-button role=button tabindex=0><svg viewbox="0 -960 960 960" xmlns=http://www.w3.org/2000/svg><path d="M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z"/></svg></div><li class=language-switcher><details class=dropdown><summary aria-label="Language selection" title="Language selection" aria-haspopup=true role=button><div class=language-switcher-icon></div></summary> <div class=dropdown-content role=menu>English<a aria-label=Français href=https://zzmzaw.github.io/fr/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/ lang=fr role=menuitem>Français</a></div></details><li class="theme-switcher-wrapper js"><div aria-label="Toggle dark mode" title="Toggle dark/light mode" aria-pressed=false class=theme-switcher role=button tabindex=0></div><div aria-label="Reset mode to default" class="theme-resetter arrow" title="Reset mode to default" aria-hidden=true role=button tabindex=0></div></div></ul></div></nav></header><div class=content><main><article><h1 class=article-title>Choosing an OS according to expectations and security threats</h1><ul class=meta><li>20th Nov 2024<li title="1616 words"><span aria-hidden=true class=separator>•</span>9 min read<li class=tag><span aria-hidden=true class=separator>•</span>Tags: <li class=tag><a href=https://zzmzaw.github.io/tags/os/>os</a>, <li class=tag><a href=https://zzmzaw.github.io/tags/guix/>guix</a>, <li class=tag><a href=https://zzmzaw.github.io/tags/nix/>nix</a>, <li class=tag><a href=https://zzmzaw.github.io/tags/security/>security</a></ul><section class=body><section class=series-page-intro><div><details><summary>This article is the first of the series: <a aria_label="A not-so-badly secure OS config" href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/>A not-so-badly secure OS config</a></summary> <ol><li>Choosing an OS according to expectations and security threats<li><a aria_label="Preparing for Guix System installation" href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/02-preparing-guix-system-installation/>Preparing for Guix System installation</a></ol></details></div></section><p>I plan to move to another OS in order to smooth my daily digital life which mostly consists in browsing the Internet, developing and playing around with security challenges. In addition, it has also to limit my risks according to my threat model.<p>I will try to clearly describe what I expect from such a system and what kind of threats I may face so that I can ensure they are all covered as much as possible.<p>I would like to emphasize that it is not a complete and fair comparison of all existing operating systems. This analysis is tailored to my personal situation, and yours may and should be different. I would recommend using this article to help you identify your own expectations and threats, instead of as a concrete list to follow.<p>Last but not least, this brief comparison is based on data collected from the Internet. At the time of writing, I did not perform any experiments, and the outcome may differ from the expectations described here.<h1 id=what-do-i-expect><a aria-label="Anchor link for: what-do-i-expect" class="header-anchor no-hover-padding" href=#what-do-i-expect><span aria-hidden=true class=link-icon></span></a> What do I expect?</h1><h2 id=great-developer-experience><a aria-label="Anchor link for: great-developer-experience" class="header-anchor no-hover-padding" href=#great-developer-experience><span aria-hidden=true class=link-icon></span></a> Great developer experience</h2><p>I spend a lot of time developing so the system must allow an excellent experience as a developer, including for mobile. Being able to connect with an android phone is a must in order to keep mine up-to-date.<p>I want this system to improve my development productivity in a reliable, reproducible and sustainable way.<p>Last but not least, being able to test new tools, new libraries or new way of working should be made easy without putting the whole system at risk. Being able to get rid of anything useless to me is a must-have.<h2 id=easy-to-keep-up-to-date><a aria-label="Anchor link for: easy-to-keep-up-to-date" class="header-anchor no-hover-padding" href=#easy-to-keep-up-to-date><span aria-hidden=true class=link-icon></span></a> Easy to keep up-to-date</h2><p>I want to be able to keep the system running until I can invest some time to properly manage an upgrade or upgrade in a granular way a part of the system without requiring to look at the entire system.<p>If it forces me to upgrade, install and test again everything when I don't have enough time, I will end up doing the minimal quick and dirty stuff to be able to use the system with minimal capabilities. The more I use it in this state, the less I feel motivated to invest time to upgrade it and, I just end up thinking about how to completely replace it with something better.<h2 id=fully-configurable-in-a-declarative-way-through-text-files><a aria-label="Anchor link for: fully-configurable-in-a-declarative-way-through-text-files" class="header-anchor no-hover-padding" href=#fully-configurable-in-a-declarative-way-through-text-files><span aria-hidden=true class=link-icon></span></a> Fully configurable in a declarative way through text files</h2><p>I don't like GUIs... at least for configuring my operating system. I want to be able to write down in a text file what I expect from the system and let it configure itself to reach this desired state properly. Advantages of text files are that they are easy to store, easy to back up, easy to share, easy to compare and their generation can be easily automated.<p>Cherry on the cake, if the system configuration is reproducible, it would make sure I can rebuild everything from scratch without worrying about it.<h2 id=make-software-built-from-sources-easy-but-only-when-needed><a aria-label="Anchor link for: make-software-built-from-sources-easy-but-only-when-needed" class="header-anchor no-hover-padding" href=#make-software-built-from-sources-easy-but-only-when-needed><span aria-hidden=true class=link-icon></span></a> Make software built from sources easy but only when needed</h2><p>Build software from sources can really be time-consuming and become a nightmare. Having an incremental build and relying on binaries caches is indispensable. Self-hostable binaries cache is even better, even if it requires enough maturity to manage them (which won't be the case at first).<p>Nevertheless, from time to time, for an uncommon configuration or a specific tweak, building from sources can be really useful.<h2 id=as-much-free-and-open-source-as-possible><a aria-label="Anchor link for: as-much-free-and-open-source-as-possible" class="header-anchor no-hover-padding" href=#as-much-free-and-open-source-as-possible><span aria-hidden=true class=link-icon></span></a> As much free and open source as possible</h2><p>I am fully in line with the "Free Software Definition" <sup class=footnote-reference id=fr-1-1><a href=#fn-1>[1]</a></sup> and I do agree that open source is not always equivalent to free. Nevertheless, I also acknowledge that I am not able, neither in terms of time invested nor in terms of money, to avoid using any non-free software.<p>My current situation is that I do my best to use a free software whenever possible and at least open source software. I may use closed-source software in places I am not confident to deal with (e.g. boot sequence, GPU driver ...). Maybe some day, I'll feel confident enough to invest more time and resources in getting rid of any non-free software I use.<h1 id=a-simple-threat-model><a aria-label="Anchor link for: a-simple-threat-model" class="header-anchor no-hover-padding" href=#a-simple-threat-model><span aria-hidden=true class=link-icon></span></a> A simple threat model</h1><p>A threat is a potential or actual undesirable event that may be malicious (such a ransomware attack) or incidental (such as a computer crash).<p>In my case, the threat model will be contextualised to what could happen to my personal laptop, living in a place where I don't feel a risk for my life if I fail in securing it properly.<p>This has to be kept in mind not only while looking at this model but also while applying the configuration I'll propose as this may not suit your own situation. Nevertheless, I'll try to move the security level above what is just require from this analysis everytime it is possible and remains usable according to my personal feeling.<h2 id=unavailability-due-to-laptop-failure-or-destruction><a aria-label="Anchor link for: unavailability-due-to-laptop-failure-or-destruction" class="header-anchor no-hover-padding" href=#unavailability-due-to-laptop-failure-or-destruction><span aria-hidden=true class=link-icon></span></a> Unavailability due to laptop failure or destruction</h2><p>A laptop can break down at any time, whether due to wear and tear or an accident.<p>As I am focused on the laptop only, I'll assume data is properly replicated elsewhere and I am able to access it without it. I may cover data backup and recovery in the future but it is out of the scope of this series.<p>Anyway, if my laptop becomes impossible to use, I want it to be easily reinstalled as it was once it is repaired (or replaced).<h2 id=data-discolure-due-to-laptop-theft><a aria-label="Anchor link for: data-discolure-due-to-laptop-theft" class="header-anchor no-hover-padding" href=#data-discolure-due-to-laptop-theft><span aria-hidden=true class=link-icon></span></a> Data discolure due to laptop theft</h2><p>A laptop is considered a valuable object and can be the target of a theft.<p>If it happens, I want to make sure it will be if not impossible at least very hard to get access to the data hosted in it.<h2 id=system-compromise-due-to-internet-browsing><a aria-label="Anchor link for: system-compromise-due-to-internet-browsing" class="header-anchor no-hover-padding" href=#system-compromise-due-to-internet-browsing><span aria-hidden=true class=link-icon></span></a> System compromise due to Internet browsing</h2><p>I spend a lot of time on the Internet and I develop every time I can. There is always a risk of compromise either by browsing directly or by downloading bad things (binary, code, dependency).<p>If it happens, I want the compromise to be limited to the browsing session with as few way to persist after a reboot as possible. In addition, the compromise should be limited to a particular context (e.g. the development session) wihtout being able to easily spread to the entire system.<h1 id=choosing-my-new-operating-system><a aria-label="Anchor link for: choosing-my-new-operating-system" class="header-anchor no-hover-padding" href=#choosing-my-new-operating-system><span aria-hidden=true class=link-icon></span></a> Choosing my new operating system</h1><p>Due to the fact I would like a declarative and reproducible way to configure my operating system, I quickly end-up with the two following ones:<ul><li>NixOS (<a rel="noopener nofollow noreferrer" href=https://nixos.org/ target=_blank>https://nixos.org/</a>)<li>Guix System (<a rel="noopener nofollow noreferrer" href=https://guix.gnu.org target=_blank>https://guix.gnu.org</a>)</ul><p>Those operating systems are really similar. They both rely on a declarative package manager to make system configuration reliable, reversible and reproducible:<ul><li>NixOS package manager is nix, relying on nix language<li>Guix System package manager is guix, relying on Guile Scheme language</ul><p>As there are already many comparisons between those two operating systems <sup class=footnote-reference id=fr-2-1><a href=#fn-2>[2]</a></sup>, I'll just explain why I chose Guix System over NixOS. This choice is mostly subjective because both are great operating systems. You just sometimes need to follow your gut.<p>First of all, Guile Scheme looks cleaner than nix. It is just my personal taste but as all the configuration will be done using one of those languages, it is better to feel at ease with it.<p>Nix has many more packages than Guix and they are more up-to-date. Nevertheless, as most of my tooling is Rust-based, I expect it to be not so complex to compile (but I may be completely wrong). In addition, it seems possible to use nix from Guix System which would allow taking advantage of the huge nix package repository. The other way seems true as well, even if it might not be as interesting.<p>Both of them have binary caches which would allow to pre-compile software I use.<p>Guix feels more unified and integrated. This may be due to the smaller community or the slower pace of evolution, but it makes me confident I'll be able to follow and move only when I want to. I am not sure whether it is good or bad, though. Being unified is good if enough is covered to be useful. I assume it is the case for Guix System.<p>By the way, I am a bit afraid that I may have to package too much software by myself, in particular non-free ones that my current laptop may require.<p>But I think I can give Guix System a try and fall back to NixOS if it becomes too time-consuming.<p>What's more, if NixOS is not practical as well for me, I identified CachyOS (<a rel="noopener nofollow noreferrer" href=https://cachyos.org/ target=_blank>https://cachyos.org/</a>) which is based on Arch Linux and may be faster to configure. Even if its configuration is not declarative, it seems security is a core feature alongside performance.<p>Before finishing, I would like to mention RedoxOS (<a rel="noopener nofollow noreferrer" href=https://www.redox-os.org/ target=_blank>https://www.redox-os.org/</a>). It is a completely new general-purpose operating system with a microkernel architecture under active development. Unfortunately, it is not mature yet for production use. If its configuration is made easy and, even better, in a declarative way (let's dream a bit), it could become a fascinating operating system to look at in the future.<section class=series-page-outro><p>Now we have chosen Guix System as a new operating system, let's see how to prepare for its installation in <a aria_label="Preparing for Guix System installation" href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/02-preparing-guix-system-installation/>the next article of this series</a>.</section><hr><ol class=footnotes-list><li id=fn-1><p><a rel="noopener nofollow noreferrer" href=https://www.gnu.org/philosophy/free-sw.en.html target=_blank>https://www.gnu.org/philosophy/free-sw.en.html</a> <a href=#fr-1-1>↩</a></p><li id=fn-2><p>I listed a few articles to start with. There is no particular order and it is incomplete, so just use your favorite search engine.</p> <ul><li><a rel="noopener nofollow noreferrer" href=https://forum.systemcrafters.net/t/nixos-vs-guix-a-non-programmers-novice-perspective/875 target=_blank>https://forum.systemcrafters.net/t/nixos-vs-guix-a-non-programmers-novice-perspective/875</a><li><a rel="noopener nofollow noreferrer" href=https://lwn.net/Articles/962788/ target=_blank>https://lwn.net/Articles/962788/</a><li><a rel="noopener nofollow noreferrer" href=http://www.willghatch.net/blog/2020/06/27/nixos-the-good-the-bad-and-the-ugly/ target=_blank>http://www.willghatch.net/blog/2020/06/27/nixos-the-good-the-bad-and-the-ugly/</a><li><a rel="noopener nofollow noreferrer" href=https://www.reddit.com/r/NixOS/comments/1d2s6r1/why_nixos_won_over_guix/ target=_blank>https://www.reddit.com/r/NixOS/comments/1d2s6r1/why_nixos_won_over_guix/</a><li><a href="https://news.ycombinator.com/item?id=32927469" rel="noopener nofollow noreferrer" target=_blank>https://news.ycombinator.com/item?id=32927469</a><li><a href="https://www.youtube.com/watch?v=PiAMRXYIri0" rel="noopener nofollow noreferrer" target=_blank>https://www.youtube.com/watch?v=PiAMRXYIri0</a><li><a rel="noopener nofollow noreferrer" href=https://doronbehar.com/articles/why-I-chose-NixOS/ target=_blank>https://doronbehar.com/articles/why-I-chose-NixOS/</a><li><a rel="noopener nofollow noreferrer" href=https://gist.github.com/abcdw/e54807b0a25e61fe2cf1bf8991410f83 target=_blank>https://gist.github.com/abcdw/e54807b0a25e61fe2cf1bf8991410f83</a></ul> <a href=#fr-2-1>↩</a></ol></section><nav class="full-width article-navigation"><div><a aria-describedby=left_title aria-label=Prev href=https://zzmzaw.github.io/posts/first-post/><span class=arrow>←</span> Prev</a><p aria-hidden=true id=left_title>My very first post</div><div><a aria-describedby=right_title aria-label=Next href=https://zzmzaw.github.io/posts/verifying-openpgp-signature/>Next <span class=arrow>→</span></a><p aria-hidden=true id=right_title>Verifying the OpenPGP signature of dowloaded files</div></nav></article></main><div id=button-container><div id=toc-floating-container><input class=toggle id=toc-toggle type=checkbox><label class=overlay for=toc-toggle></label><label title="Toggle Table of Contents" class=button for=toc-toggle id=toc-button><svg viewbox="0 -960 960 960" xmlns=http://www.w3.org/2000/svg><path d="M414.82-193.094q-18.044 0-30.497-12.32-12.453-12.319-12.453-30.036t12.453-30.086q12.453-12.37 30.497-12.37h392.767q17.237 0 29.927 12.487 12.69 12.486 12.69 30.203 0 17.716-12.69 29.919t-29.927 12.203H414.82Zm0-244.833q-18.044 0-30.497-12.487Q371.87-462.9 371.87-480.45t12.453-29.92q12.453-12.369 30.497-12.369h392.767q17.237 0 29.927 12.511 12.69 12.512 12.69 29.845 0 17.716-12.69 30.086-12.69 12.37-29.927 12.37H414.82Zm0-245.167q-18.044 0-30.497-12.32t-12.453-30.037q0-17.716 12.453-30.086 12.453-12.369 30.497-12.369h392.767q17.237 0 29.927 12.486 12.69 12.487 12.69 30.203 0 17.717-12.69 29.92-12.69 12.203-29.927 12.203H414.82ZM189.379-156.681q-32.652 0-55.878-22.829t-23.226-55.731q0-32.549 23.15-55.647 23.151-23.097 55.95-23.097 32.799 0 55.313 23.484 22.515 23.484 22.515 56.246 0 32.212-22.861 54.893-22.861 22.681-54.963 22.681Zm0-245.167q-32.652 0-55.878-23.134-23.226-23.135-23.226-55.623 0-32.487 23.467-55.517t56.12-23.03q32.102 0 54.721 23.288 22.62 23.288 22.62 55.775 0 32.488-22.861 55.364-22.861 22.877-54.963 22.877Zm-.82-244.833q-32.224 0-55.254-23.288-23.03-23.289-23.03-55.623 0-32.333 23.271-55.364 23.272-23.03 55.495-23.03 32.224 0 55.193 23.288 22.969 23.289 22.969 55.622 0 32.334-23.21 55.364-23.21 23.031-55.434 23.031Z"/></svg></label><div class=toc-content><div class=toc-container><ul><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#what-do-i-expect>What do I expect?</a> <ul><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#great-developer-experience>Great developer experience</a><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#easy-to-keep-up-to-date>Easy to keep up-to-date</a><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#fully-configurable-in-a-declarative-way-through-text-files>Fully configurable in a declarative way through text files</a><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#make-software-built-from-sources-easy-but-only-when-needed>Make software built from sources easy but only when needed</a><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#as-much-free-and-open-source-as-possible>As much free and open source as possible</a></ul><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#a-simple-threat-model>A simple threat model</a> <ul><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#unavailability-due-to-laptop-failure-or-destruction>Unavailability due to laptop failure or destruction</a><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#data-discolure-due-to-laptop-theft>Data discolure due to laptop theft</a><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#system-compromise-due-to-internet-browsing>System compromise due to Internet browsing</a></ul><li><a href=https://zzmzaw.github.io/posts/a-not-so-badly-secure-os-config/01-choosing-the-os/#choosing-my-new-operating-system>Choosing my new operating system</a></ul></div></div></div><a title="Go to the top of the page" class=no-hover-padding href=# id=top-button> <svg viewbox="0 0 20 20" fill=currentColor><path d="M3.293 9.707a1 1 0 010-1.414l6-6a1 1 0 011.414 0l6 6a1 1 0 01-1.414 1.414L11 5.414V17a1 1 0 11-2 0V5.414L4.707 9.707a1 1 0 01-1.414 0z"/></svg> </a></div><span class=hidden id=copy-success> Copied! </span><span class=hidden id=copy-init> Copy code to clipboard </span><script defer src=https://zzmzaw.github.io/js/copyCodeToClipboard.min.js></script></div><footer><section><nav class="socials nav-navs"><ul><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer" href=https://zzmzaw.github.io/atom.xml target=_blank> <img alt=feed loading=lazy src=https://zzmzaw.github.io/social_icons/rss.svg title=feed> </a><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer me" href=https://github.com/ZzMzaw target=_blank> <img alt=github loading=lazy src=https://zzmzaw.github.io/social_icons/github.svg title=github> </a><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer me" href=https://gitlab.com/ZzMzaw target=_blank> <img alt=gitlab loading=lazy src=https://zzmzaw.github.io/social_icons/gitlab.svg title=gitlab> </a><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer me" href=https://matrix.to/#/@zzmzaw:zzmzaw.dev target=_blank> <img alt=matrix loading=lazy src=https://zzmzaw.github.io/social_icons/matrix.svg title=matrix> </a><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer me" href=https://discordapp.com/users/1199491352623337594 target=_blank> <img alt=discord loading=lazy src=https://zzmzaw.github.io/social_icons/discord.svg title=discord> </a><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer me" href=https://www.root-me.org/ZzMzaw target=_blank> <img alt=rootme loading=lazy src=https://zzmzaw.github.io/social_icons/rootme.svg title=rootme> </a><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer me" href=https://app.hackthebox.com/users/1823204 target=_blank> <img alt=hackthebox loading=lazy src=https://zzmzaw.github.io/social_icons/hackthebox.svg title=hackthebox> </a><li><a class="nav-links no-hover-padding social" href="https://news.ycombinator.com/user?id=zzmzaw" rel="noopener noreferrer me" target=_blank> <img alt=hacker-news loading=lazy src=https://zzmzaw.github.io/social_icons/hacker-news.svg title=hacker-news> </a><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer me" href=https://www.reddit.com/user/ZzMzaw target=_blank> <img alt=reddit loading=lazy src=https://zzmzaw.github.io/social_icons/reddit.svg title=reddit> </a><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer me" href=https://stackoverflow.com/users/23289335/zzmzaw target=_blank> <img alt=stack-overflow loading=lazy src=https://zzmzaw.github.io/social_icons/stack-overflow.svg title=stack-overflow> </a><li><a class="nav-links no-hover-padding social" rel="noopener noreferrer me" href=https://xdaforums.com/m/zzmzaw.11836937/ target=_blank> <img alt=xda loading=lazy src=https://zzmzaw.github.io/social_icons/xda.svg title=xda> </a></ul></nav><nav class=nav-navs><small> <ul><li><a class="nav-links no-hover-padding" href=https://zzmzaw.github.io/about/> about </a><li><a class="nav-links no-hover-padding" href=https://zzmzaw.github.io/privacy/> privacy policy </a><li><a class="nav-links no-hover-padding" href=https://zzmzaw.github.io/sitemap.xml> sitemap </a></ul> </small></nav><div class=credits><small> <p><p><a rel="noopener nofollow noreferrer" href=https://zzmzaw.github.io target=_blank>ZzMzaw's blog</a> © 2025 by <a rel="noopener nofollow noreferrer" href=https://zzmzaw.github.io/about target=_blank>ZzMzaw</a> is licensed under <a rel="noopener nofollow noreferrer" href=https://creativecommons.org/licenses/by-sa/4.0/ target=_blank>CC BY-SA 4.0</a> <img alt="Creative Commons logo" src=/img/cc/cc.svg#cc> <img alt="Creative Commons By icon" src=/img/cc/by.svg#cc> <img alt="Creative Commons SA icon" src=/img/cc/sa.svg#cc></p> Powered by <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> & <a rel="noopener noreferrer" href=https://github.com/welpo/tabi target=_blank>tabi</a> • <a rel="noopener noreferrer" href=https://github.com/ZzMzaw/zzmzaw.github.io target=_blank> Site source </a></small></div></section><div class="search-modal js" aria-labelledby=modalTitle id=searchModal role=dialog><h1 class=visually-hidden id=modalTitle>Search</h1><div id=modal-content><div id=searchBar><div aria-hidden=true class=search-icon><svg viewbox="0 -960 960 960" xmlns=http://www.w3.org/2000/svg><path d="M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z"/></svg></div><input aria-controls=results-container aria-expanded=false autocomplete=off id=searchInput placeholder=Search… role=combobox spellcheck=false><div class="close-icon interactive-icon" title="Clear search" id=clear-search role=button tabindex=0><svg viewbox="0 -960 960 960" xmlns=http://www.w3.org/2000/svg><path d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z"/></svg></div></div><div id=results-container><div id=results-info><span id=zero_results> No results</span><span id=one_results> $NUMBER result</span><span id=many_results> $NUMBER results</span><span id=two_results> $NUMBER results</span><span id=few_results> $NUMBER results</span></div><div id=results role=listbox></div></div></div></div></footer>

Pages: 1 2 3 4 5 6 7 8 9 10