<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>paritybit.ca</title>
	<link href="http://www.paritybit.ca/" />
	<link rel="self" href="http://www.paritybit.ca/feed.xml" />
	<icon>/favicon.png</icon>
	<updated>2025-12-28T22:46:22Z</updated>
	<id>http://www.paritybit.ca/</id>
	<generator>sbs</generator>

	<entry>
		<title>Oh Right, I Have A Blog</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/oh-right-i-have-a-blog/" />
		<id>http://www.paritybit.ca/blog/oh-right-i-have-a-blog/</id>
		<updated>2025-12-28T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="oh-right-i-have-a-blog">Oh Right, I Have A Blog</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2025-12-28</p>
<p><em>*taps server*</em> is this thing still on?</p>
<p>It&#8217;s been a year since I&#8217;ve posted anything on this here blog. I&#8217;ve mostly been
idle from a lot of computering as I&#8217;ve focused on other things in life
(reading, gardening, home renovation) and it&#8217;s been pretty nice to step back.</p>
<p>In all honesty, I&#8217;ve been pretty burnt out from a lot of the online spaces
surrounding tech and computers. The constant black-and-white discussions and
moralistic grandstanding coupled with a pressure to perform a certain way
(are you using the &#8220;right&#8221; technologies, what are <em>you</em> working on, etc.) was a
great combination to lead to burnout. Since largely stepping back from such
places, changing the way I&#8217;ve used various platforms, and more intentionally
focusing my attention on things I actually want to focus my attention on rather
than what I feel I <em>should</em> be focusing my attention on, I&#8217;ve been feeling a
lot better.</p>
<p>But, let&#8217;s not dwell on the negative things. Here&#8217;s what I did in 2025 that
brought me joy:</p>
<h2 id="switched-to-sublime-text">Switched to Sublime Text</h2>
<p>I left Neovim behind and switched back to the first text editor I ever used when
I got started programming, <a href="https://www.sublimetext.com/">Sublime Text</a>.</p>
<p>I&#8217;ve been transitioning towards tools that I feel remove the barriers towards
achieving the end-goals I wish to achieve when I use a computer. That&#8217;s why
I&#8217;ve moved back to Thunderbird from various CLI&#47;TUI email clients, why I&#8217;ve
switched from SourceHut to Forgejo, why I&#8217;ve moved back to Ubuntu on my laptop
from the BSDs and Arch&#47;Alpine&#47;Gentoo-type Linux distributions, and why I&#8217;ve now
also abandoned the editor that won <a href="https://en.wikipedia.org/wiki/Editor_war">The Editor Wars</a><sup>citation needed</sup>.</p>
<p>I&#8217;ll (probably) write a blog post all about this transition, my configuration,
and whatever else people are interested in, but suffice it to say that I&#8217;m
feeling a lot less constrained by Sublime&#8217;s paradigm compared to Neovim, and I
haven&#8217;t been any slower editing text once I learned Sublime&#8217;s shortcuts.</p>
<h2 id="podcast-editing">Podcast Editing</h2>
<p>I&#8217;ve edited 20 episodes of the <a href="https://linuxlads.com/">Linux Lads Podcast</a> this
year, including some really fun interview episodes. We&#8217;ve seen our listenership
increase by over 10% and even had a sponsor for one episode that helped pay
hosting and bandwidth costs.</p>
<p>If you&#8217;re looking for something to listen to, head on over and try it out. I
highly recommend the episodes with guests; we&#8217;ve had some very fun interviews
recently.</p>
<h2 id="dungeon-mastering">Dungeon Mastering</h2>
<p>This year, I started DMing a D&#38;D campaign for my friends for the first time. I
decided this on a whim when my friends and I were lamenting that we didn&#8217;t
really have a video game we were all interested in playing together. It turned
out to be a really good creative outlet.</p>
<p>I began by watching and reading as much DMing content as I could get my hands on
to get a feel for what &#8220;Good DMing&#8221; looks like. <a href="https://www.youtube.com/@Dadi-MysticArts">Mystic Arts</a>, <a href="https://www.youtube.com/@mcolville">Matthew Colville</a>, and <a href="https://theangrygm.com/">The Angry GM</a> were all phenomenal resources for that. I then
planned to start by running the pre-made Lost Mines of Phandelver campaign
(the &#8220;starter&#8221; adventure for 5e D&#38;D) but, due to scheduling conflicts, I ended
up running two one-shot adventures before that which went well and were
actually alright for getting a feel for DMing.</p>
<p>During our main campaign, when people were unable to make sessions, I also took
a stab at running a few quick <a href="https://www.thearcanelibrary.com/pages/shadowdark">Shadowdark</a> adventures as one-shots. We
found that we really liked the simplicity and freedom of Shadowdark and we&#8217;re
going to switch to that system for the next campaign, which will be in my
homebrewed setting for which I get to do fun things like make a world map,
create a spreadsheet to track the world&#8217;s economics, and hand-craft individual
dungeons so I can kill my players in creative ways!</p>
<h2 id="book-clubbing">Book Clubbing</h2>
<p>As part of a book club with those same friends, I&#8217;ve read 17 books this year. We
tend to read about half a book per week and then meet on weekends before our
D&#38;D time to talk about the book. Sometimes we also talk about the differences
between the book and its adaptation in film or TV if it has one. This year,
we&#8217;ve read:</p>
<ul>
<li>The Three Body Problem trilogy by Cixin Liu</li>
<li>Neuromancer by William Gibson</li>
<li>Blindsight and Echopraxia by Peter Watts</li>
<li>The Magicians trilogy by Lev Grossman</li>
<li>The Dungeon Crawler Carl series by Matt Dinniman</li>
<li>Project Hail Mary by Andy Weir</li>
</ul>
<p>Reading always feels better than watching YouTube or scrolling the Internet
(it almost feels the same as eating really tasty food but for my brain) and
having a soft deadline is a great motivator to read more.</p>
<h2 id="easterhegg-22">Easterhegg 22</h2>
<p>My wife and I attended <a href="https://eh22.easterhegg.eu/">Easterhegg 22</a>, a
smaller &#8220;congress&#8221; also associated with the <a href="https://www.ccc.de/">Chaos Communication Club</a> that occurs on the Easter holiday weekend. We hung out
with friends we hadn&#8217;t seen in a while, met some new people who we&#8217;d only known
from the Fediverse, and also did a few Angel shifts for the first time.</p>
<h2 id="wave-gotik-treffen">Wave Gotik Treffen</h2>
<p>I also went to <a href="https://wave-gotik-treffen.de/">Wave Gotik Treffen (WGT)</a> with
my wife—as is now our yearly tradition—and had a good time listening to
interesting music and enjoying Leipzig. I discovered <a href="https://cosirecords.bandcamp.com/album/in-the-cut">Giant Crow</a> and took many photographs
of the city while I was there (photos coming soon™ to <a href="https://www.paritybit.ca/gallery/">the Gallery</a>).</p>
<h2 id="39c3">39C3</h2>
<p>I&#8217;m currently writing this blog post from <a href="https://events.ccc.de/congress/2025/infos/startpage.html">39C3</a> (the 39th Chaos
Communication Congress), where we&#8217;ve also been doing a lot of Angel shifts,
seeing friends we don&#8217;t see very often, and hanging out with the <a href="http://ol-tele.com/">Øl Telecom</a> folks. There have apparently been some good talks this
year, including one on <a href="https://media.ccc.de/v/39c3-to-sign-or-not-to-sign-practical-vulnerabilities-i">multiple new vulnerabilities in GPG</a>, <a href="https://events.ccc.de/congress/2025/hub/en/event/detail/a-post-american-enshittification-resistant-internet">one
from Cory Doctorow</a>,
and <a href="https://events.ccc.de/congress/2025/hub/en/event/detail/ai-agent-ai-spy">one with Meredith Whitaker</a>. I&#8217;ll
uh&#8230; watch the recordings later™.</p>
<p>Good vibes all around 🚀</p>
<h2 id="other-in-person-stuff">Other In-Person Stuff</h2>
<p>I also visited the <a href="https://aachen.ccc.de/">CCCAC</a> and connected with a few
people there, and met various other friends in various other cities around the
country. I find meeting people in person and connecting on a small scale super
refreshing compared to the typical large scale of the internet. Would highly
recommend.</p>
<h2 id="next-year">Next Year</h2>
<p>What will the next year bring? More blog posts? More computering? I have no
idea.</p>
<p>I&#8217;m not making any promises or new year&#8217;s resolutions or anything of the sort.
I&#8217;ve learned that if I want to keep computing as a hobby fun, then all I should
do is what I feel like doing in the moment. Even if deep down I think it might
be fun to write my own OS, there&#8217;s no sense in me publicly promising that I&#8217;m
going to get started on it in 2026 and putting that pressure on myself; it&#8217;s
better to wait until I actually feel the urge to do it and then work in silence
until I have something I want to share.</p>
<p>I guess that&#8217;s one of the biggest things I learned about myself this year: I
work best when I don&#8217;t try to publicize what I&#8217;m working on and when I let
inspiration find me, instead of succumbing to the pressure to focus on a
particular field or technology just because it&#8217;s what the people around me are
focused on.</p>
<p>Anyways, best of luck in the new year!</p>
		]]></content>
	</entry>

	<entry>
		<title>An Update About This Very Webbed Site</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/an-update-about-this-very-webbed-site/" />
		<id>http://www.paritybit.ca/blog/an-update-about-this-very-webbed-site/</id>
		<updated>2024-09-12T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="an-update-about-this-very-webbed-site">An Update About This Very Webbed Site</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2024-09-12</p>
<p>I&#8217;ve made some significant changes to this website in the time before
I last posted my previous blog post previously before in the past and
I wanted to detail them in case people find some things I&#8217;ve done useful
for their own site.</p>
<p>This is what my website used to look like:</p>
<figure>
    <img src="old-design.png">
    <figcaption>The old design.</figcaption>
</figure>
<p>Kinda stale and boring and bleh. The old style felt a bit too
plain—lacking in personality and flair; not something I was really happy
with. I wanted to make some changes and spruce some things up. This was
also partially spurred on by the death of 10kbclub.com.</p>
<h2 id="dobby-is-free">Dobby is FREE!</h2>
<p>I don&#8217;t know why 10kbclub.com died or when it happened, but what I do
know is that I no longer have to care about keeping the transmitted
bandwidth of my front page under 10kB. I can stop with the stupid page
size measuring contest and have nice things again!</p>
<p>Besides, I&#8217;m really not interested in website asceticism anymore. I want
my site to <em>feel like it&#8217;s my site</em>; to have a kind of personality
rather than just being a plain slab with words.</p>
<p>This includes making my site actually look good consistently across
different operating systems using the power of slapping away your font
choices and giving you what I prescribe: IBM Plex.</p>
<p>So I went to <a href="https://www.ibm.com/plex/">their website</a>, downloaded the
particular font files I wanted to use on my site along with their CSS
samples, dropped these files on my server, integrated the CSS, and now
hooray! Fonts! Things can finally look good across Windows, iOS, and
Linux without a visitor already needing to have the fonts I specified or
having chosen a different default font in their web browser
settings—which almost nobody does.</p>
<p>To stop this from hurting people on slower connections, I&#8217;ve added
<code>font-display: optional</code> to all the fonts in my CSS which &#8220;Gives the
font face an extremely small block period and no swap period"— whatever
the hell that means.
(<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display">Source</a>)</p>
<p>Alright I&#8217;m being told by an advanced intelligence (some guy who
actually bothered to explain things on the <a href="https://www.digitalocean.com/community/tutorials/css-font-face#step-3-mdash-using-font-display-to-control-font-loading">DigitalOcean
blog</a>)
that this means the font is given 100ms to load, and if it doesn&#8217;t load
in that time then the page is displayed using the fallback font. The
font should continue downloading in the background and will be cached so
it can be made available on subsequent page loads. Pretty nifty!</p>
<p>My fonts are also split by Unicode code point and font face so only the
fonts required to display a given page&#8217;s content will be loaded. For
example, if I&#8217;m not using any kind of Greek mathematical symbols on
a page, that particular font file won&#8217;t be requested. That way the
custom fonts only add about 100KiB to a given page which is practically
nothing when compared with media (that I also attempt to optimise) such
as the images on this blog post. As usual, once the font files are
fetched then they will be cached, and if a user has disabled custom font
loading in their browser then the font files won&#8217;t be downloaded at all.</p>
<p>Oh, yeah and apparently there&#8217;s no real readability difference between
sans and serif fonts. I thought that a sans font might look better
with the new design, so I&#8217;m trying that out.</p>
<p>There were a few other minor tweaks I made to make things feel a little
less plain too. There&#8217;s now a background around the page content to
separate it from the endless sea of background colour, new styling for
headings, outlines around images, and some CSS that lets me use custom
emoji the same way I can on the Fediverse so I can actually express my
complex inner storm of emotions. <img class="emoji"
src="/neofox/neofox_up_sleep.png"></p>
<p>And this is the result:</p>
<figure>
    <img src="new-design-light-mode.png">
    <figcaption>The new design.</figcaption>
</figure>
<p>Now that the CSS is a good bit larger (mostly thanks to the font
configuration) I&#8217;m no longer embedding a minified stylesheet in the
HTML. When the CSS was around 600 bytes per page it made sense to embed
it because the added bandwidth and latency of an extra request made no
sense for such a small amount of data. Now the CSS is a little over 2kB
(compressed) and the cost of downloading it is quickly made up for by
caching the same data across several page visits. Here&#8217;s what that looks
like for the front page:</p>
<table>
<thead>
<tr>
<th></th>
<th>Before</th>
<th>After</th>
</tr>
</thead>
<tbody>
<tr>
<td>HTML</td>
<td>6.07kB</td>
<td>4.32kB</td>
</tr>
<tr>
<td>CSS</td>
<td>-</td>
<td>2.14kB</td>
</tr>
<tr>
<td>Total</td>
<td>6.07kB</td>
<td>6.46kB</td>
</tr>
</tbody>
</table>
<p>Embedding minified CSS into my HTML was a bit unwieldy anyways when
I wanted to make changes, and it also means it&#8217;s easier for someone to
download the CSS and review it without having to un-minify it first.</p>
<h2 id="something-edgy-about-darkness">[Something Edgy About Darkness]</h2>
<p>A couple years back I switched to using my computers primarily with
a light theme. This is an objectively superior choice that everyone
should agree with, but sometimes I&#8217;m using my phone in a dark
environment and would prefer to maintain the health of my retinas so
I decided to re-make a dark theme.</p>
<p>I previously removed my dark theme before I wasn&#8217;t happy with it and got
tired of maintaining it when I hardly used it, but I&#8217;ve drastically
simplified my CSS since then and also found a much nicer colour scheme:</p>
<figure>
    <img src="new-design-dark-mode.png">
    <figcaption>The new design with the dark mode colour scheme.</figcaption>
</figure>
<p>I stumbled across these particular colours when I chose a colour scheme
that was roughly based on the colours in the light theme but would also
contrast well on a dark background, and then checked it against various
colourblind filters to make sure things were still readable. Turns out,
tritanopia is aesthetic af, so I just colourpicked the colours right
from the browser with that filter activated and went with those.</p>
<p>That means that if you&#8217;re one of the 0.0008% of the human population
with tritanopia then you can rest easy knowing that you see the dark
mode version of this website exactly the same as everybody else does.</p>
<h2 id="index-dot-haych-tee-em-ell">Index Dot Haych Tee Em Ell</h2>
<p>Along with the visual frontend changes, I also remixed the backend to
make it much more convenient to work with.</p>
<p>The site was previously arranged something like:</p>
<pre><code>.
|-- img&#47;
|   |-- hot-single-laptops-in-your-area.jpg
|   `-- history-of-the-roman-empire.png
|-- blog.html
|-- blog&#47;
|   |-- what-happened-to-the-romans.html
|   `-- my-laptop-is-better-than-yours.html
|-- projects.html
|-- projects&#47;
|   |-- tiny-5mb-javascript-framework.html
|   `-- c-replacement-language-number-37952.html
`-- home.html
</code></pre>
<p>But now it&#8217;s arranged like:</p>
<pre><code>.
|-- blog&#47;
|   |-- index.html
|   |-- what-happened-to-the-romans&#47;
|   |   |-- index.html
|   |   `-- history-of-the-roman-empire.png
|   `-- my-laptop-is-better-than-yours&#47;
|       |-- index.html
|       `-- hot-single-laptops-in-your-area.jpg
|-- projects&#47;
|   |-- index.html
|   |-- tiny-5mb-javascript-framework&#47;
|   |   `-- index.html
|   `-- c-replacement-language-number-37952&#47;
|       `-- index.html
`-- index.html
</code></pre>
<p>Basically, I made every page an <code>index.html</code> inside of a directory, so
each page is contained within its own folder. This has several
advantages:</p>
<ul>
<li>Simplified web server configuration since I don&#8217;t have to tell the webserver to look for <code>$page_name.html</code> if a path doesn&#8217;t end in an extension.</li>
<li>Grouping related resources (images, videos, etc.) together with their pages instead of having them in separate directories.</li>
<li>Easier navigation of the directory structure on the command line since there&#8217;s no longer both a <code>blog.md</code> file and <code>blog&#47;</code> directory to mess up tab completion.</li>
</ul>
<p>I mostly did it because of the second point though. Whenever I removed
a page it was hard to know if it was safe to also remove its related
media because it could be still linked to by another page. I also would
have to record what resources the page used and go hunt for them under
<code>&#47;img&#47;</code> or <code>&#47;vid&#47;</code> instead of just being able to <code>rm -rf
--no-preserve-root my-wonderful-post &#47;</code>.</p>
<h2 id="nothing-happens-now">Nothing Happens Now</h2>
<p>One bit of cruft that I wanted to excise from my now-beautiful phoenix
of a website was the &#8220;Now&#8221; page. A <a href="https://nownownow.com/about">now
page</a> is supposed to be a page you maintain
to keep people up to date with what you&#8217;re up to now, without having to
make something like a  full life-update blog post. Some people make
a habit of updating it monthly as a way of showing others what they&#8217;ve
been up to that month, where others just update it once in a while when
they get around to it.</p>
<p>I tried doing a monthly update to help keep me on track with personal
projects, but it got to a point of feeling oppressive. I don&#8217;t tend to
like doing things on a schedule, and for many months after moving to
Germany I didn&#8217;t really have much to say because I wasn&#8217;t focused on
personal projects at all. It was also a bit awkward to integrate into my
RSS feed without drastically changing some functionality of my static
site generator.</p>
<p>So now I have a little &#8220;Now Reading&#8221; and &#8220;Now Investigating&#8221; blurb on my
front page (which, coincidentally is also where the Colophon and About
and Contact information live), and that&#8217;s good enough along with maybe
an occasional status update blog post when I actually have something to
say.</p>
<h2 id="git-out-of-here">Git Out of Here</h2>
<p>I also used to keep my website in a git repository. This made it so
I could keep around a log of changes, dig around in the history to roll
something back, accept changesets from people to fix things, and it
acted kind of like another off-site backup.</p>
<p>But it was <em>completely useless</em>.</p>
<p>Maintaining good git hygiene really just became annoying. Checking in
atomic changes and coming up with commit messages was way too onerous (I
just resorted to &#8220;*&#8220; after a while), and I&#8217;ve never needed to roll
things back in the 5 years this site has been online. When I wanted to
get rid of something it&#8217;s because I actually wanted it gone, and a git
history negated that completely too.</p>
<p>It also meant I couldn&#8217;t keep anything private without totally losing
the advantages of source control, and if I wanted to use it as an
effective backup of sorts then including the media along with the text
just bloated the repository size. Plus, absolutely nobody is
collaborating with me on my own website—any time people have noticed
spelling mistakes or something they&#8217;d just email me or tell me on Fedi
rather than sending me an entire pull request e-mail changeset diff to
fix one single missing letter.</p>
<p>The git hammer didn&#8217;t apply to this particular nail, and I could finally
be released from yet another self-imposed obligation. <img class="emoji"
src="/neofox/neofox__w_.png"></p>
<p>Anyways, I think that&#8217;s it for all the big changes I can remember making
recently. Now if you&#8217;ll excuse me, Satisfactory 1.0 was just released.
<img class="emoji" src="/neofox/neofox_laptop_notice.png"> Bye!</p>
		]]></content>
	</entry>

	<entry>
		<title>Moving Across the Ocean</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/moving-across-the-ocean/" />
		<id>http://www.paritybit.ca/blog/moving-across-the-ocean/</id>
		<updated>2024-08-25T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="moving-across-the-ocean">Moving Across the Ocean</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2024-08-25</p>
<p>Hey, hello, hi I&#8217;m still here!</p>
<p>It&#8217;s been <del>a little bit</del> over a year since my last blog post and quite
a lot has changed. My wife and I moved from Canada to Germany almost one
year ago and I wanted to share my experience with moving across the
Atlantic Ocean.</p>
<h2 id="why-move">Why Move?</h2>
<p>The short answer is that my wife and I wanted to live in a place where
we felt that we could have a better life for ourselves and our future
child(ren). Between Germany and Canada, our respective home countries,
Germany ended up being the clearly better choice.</p>
<p>Moving to Germany was always a possibility, and probably an inevitability
since I began dating my now-wife.</p>
<p>We met online, with me being in Canada and her being in Germany. The
first time I went to visit her in person—which was also the first time
I had ever flown and the first time I had ever been outside of Canada
aside from a brief road trip through &#8216;Murica in 2017—I spent 6 weeks
total in Germany, saw a few cities (Braunschweig, Lübeck, Marburg) and
met a few friends I had only ever known online. Later that year, my wife
flew to Ottawa to see me for 6 weeks around the holiday period. Later
the following year, she got accepted to a Master&#8217;s program at one of the
universities in Ottawa and was able to move in with me for about 1.5
years; until she finished her program. As she was finishing her program,
we had a choice to make: does she continue to live with me in Canada
while doing a PhD for about 4-5 years and then we likely both move to
Germany afterwards, or do we move to Germany when she&#8217;s finished the
Master&#8217;s program and start lives there sooner?</p>
<p>I started seriously thinking about whether it would be a good idea to
move to Germany in late May, 2023, when we came to Europe for 2 weeks to
attend WGT<sup id="fnref1"><a href="#fn1" rel="footnote">1</a></sup> in Leipzig, see a few other German cities and visit our
friends in the Netherlands. During that trip I started researching,
making a pros-and-cons list of reasons to move or not, and asking my
social circle what they thought were the good and bad aspects of life in
Germany because I didn&#8217;t want this to be a &#8220;grass-is-always-greener&#8221;
type of rushed decision.</p>
<p>It was pretty conclusive by the time I was done with all my research,
but when we returned to Canada I pretty quickly settled on wanting to
move sooner rather than later. We still sat on the decision for a bit,
talked things through, but then set things into motion to make it
happen.</p>
<h2 id="was-it-the-right-decision">Was It the Right Decision?</h2>
<p>Yup.</p>
<p>My life is both materially and qualitatively better. I get paid more
money (even after taxes) while working fewer hours at a more fulfilling
job, the cost of living is noticeably lower, the housing&#47;rental market
is way better, I can see interesting places and hang out with friends in
person much more easily and frequently, we now have a large garden plot
where we can grow a wide variety of veggies, and I feel so much happier
and healthier that multiple family members have commented that
I actually sound happy over the phone when I&#8217;m talking about life here.</p>
<p>There is also the distinct lack of a feeling like I&#8217;m on a constant
treadmill or in the &#8220;rat race&#8221;. This feels difficult to try to explain,
but it feels like nearly everyone in Canada is in a rush to get through
life: finish university, get a job, buy a car, buy a house, switch your
job every few years so you&#8217;re optimising your earnings, etc. and so on.
Even my wife got this feeling when she was living in Canada, and she was
only a student with a part-time job. It just feels like there&#8217;s
generally more to life in Germany (and probably Europe in general).
I feel freer to spend my money on actually doing things, experiencing
things or, hell, even trying new food from the grocery store rather than
just constantly worrying about saving for a car, saving for a house,
saving for retirement, saving for who knows what else.</p>
<p>My friend Steve Gattuso did a similar move from New York to Munich in
early 2023, and had this to say about it:</p>
<blockquote>
<p>It’s hard to deny it: our quality of life has substantially increased
in basically every way since moving to Munich. The streets are clean,
the bike lanes are plentiful and protected, the trains and public
transit work well enough to feel a first class citizen of society
without owning a car, our home is substantially larger and nicer for
a fraction of the price, the access to nature is unlike anything I’ve
ever had before. I want to say the politics are better, but honestly
I just don’t speak enough German yet to understand them and, well,
ignorance is bliss.</p>
</blockquote>
<p>&#8211; <a href="https://www.stevegattuso.me/2023/04/26/new-york-munich.html"><em>New York, Munich</em> on stevegattuso.me</a></p>
<p>Which sums up my feelings pretty well. (Also I&#8217;m not fluent in German yet,
but I can confirm that the politics are indeed better, even than Canada.)</p>
<p>It wasn&#8217;t all sunshine and roses though. There were definitely some
challenges along the way.</p>
<h2 id="the-move">The Move</h2>
<p>The moving part was actually kind of easy. As a Canadian citizen I could
enter Germany without a visa for a period of up to 90 days in any given
180 day period. The only thing we had to watch out for was our trip
earlier that year eating into that time, so we needed to leave Canada
late enough that I would have the full 90 days to figure out what I was
going to do in Germany.</p>
<p>I am very fortunate in that I had a decent level of savings so that
I didn&#8217;t have to worry too much about moving costs, and I also had a job
which allowed me to take extended leave to give the move a try. So, if
for whatever reason something went wrong (relationship troubles,
couldn&#8217;t find work or any study opportunity, etc.) and I were to have to
go back to Canada, I would be able to return to my previous job and at
least not be starting from absolute scratch.</p>
<p>So, I gave the mandatory two-month notice to my landlord telling them
that I would be moving out at the end of August, informed my job of my
intention to take unpaid time off to try this thing out, booked the
flights, and then started preparing.</p>
<p>I sold off most of the furniture and larger items I owned. With things
being priced to sell quickly, I was able to recuperate about 30–50% of
the purchase price of any given item, adding up to a grand total of
C$3,065 which all went towards financing the move. Some stuff that
wasn&#8217;t sold was donated to a student who was just moving into their own
place for the first time; extra clothing, bedding, and other items that
the student didn&#8217;t want were dropped off at a local charity shop,
<a href="https://www.highjinxottawa.com/">hijinx</a>, that does really great work
for the local community. Anything that I couldn&#8217;t take but still wanted,
such as extra books, my typewriter, other retro oddities, and extra
kitchenware are being stored at my parents&#8217; place in two medium-sized
boxes and will be slowly brought over. Overall, very little was thrown
in the trash (mostly opened food items and toiletries which nobody else
wanted), which I am very happy about.</p>
<p>We basically took a 65m² (700 ft²) apartment and condensed it into
2 carry-ons, 2 &#8220;personal items&#8221; (small backpacks), and 4 checked bags,
plus two 42.5L (1.5ft³) boxes that didn&#8217;t come with us.</p>
<p>On August 30th, I picked up a U-Haul (I found out last-minute that I had
to go all the way to Pembroke to pick it up—thanks U-Haul, your policies
suck), slept one more night in the now-barren apartment, woke up early
the next morning, loaded everything that remained into the back, and set
out for the 4.5-hour long trip from Ottawa to Toronto where my family
lives so we could store things, pack properly, and stay with them until
those 90 days were fully recharged.</p>
<p>On September 10th we headed to the airport, checked in, and flew the
approximately 8 hours to Frankfurt am Main where we crossed the border
into our new lives in Germany.</p>
<p>We spent the first two weeks of our time in Germany at a short-term
rental as we worked on finding jobs and getting situated. We rented in
a village outside of Frankfurt (am Main) so that we wouldn&#8217;t have too
far to travel from the airport and so it would be easy to take the train
to other cities for job interviews thanks to Frankfurt&#8217;s relatively
central location. It was also a nice time to get re-acquainted with
Germany and settle into our new life a bit.</p>
<p>Within the first week my wife had found a job (and I had applied to the
job that I would eventually get though I wouldn&#8217;t know this until four
months later 😬). So we stayed the remaining time we had in our
temporary rental and then moved into my wife&#8217;s parents&#8217; house for
a brief period while we searched for a flat in the city where my wife&#8217;s
job would be.</p>
<p>We ended up finding an apartment in
<a href="https://en.wikipedia.org/wiki/Aachen">Aachen</a> for October and moved in
with the stuff that we brought from Canada as well as some furniture my
wife had stored at her parents&#8217; from when she moved to Canada to live
with me. Slowly over time, with many trips to IKEA and searches on
Kleinanzeigen (the German version of Craigslist&#47;Gumtree&#47;Kijiji&#47;etc), we
furnished our apartment and settled down.</p>
<p>In Germany it&#8217;s required that you register where you&#8217;re living with the
city in which you live. This was actually a really simple process which
didn&#8217;t require me to already have a residence permit; I only needed to
bring my passport so my date of entry into the country and other
information could be recorded. In return you get a document that can act
as a proof of address, and in my case this triggered a whole bunch of
bureaucracy on the back-end that resulted in me receiving my tax ID in
the mail a few weeks later.</p>
<p>However, by the beginning of November I had applied to over two dozen or
so jobs across a wide range of sub-fields of computering with basically
no luck. Everything from sysadmin&#47;devops to IT security to programming
jobs. I wasn&#8217;t really sure what I could land a job as since I had worked
in a very niche subfield of IT Security, so in addition to the very few
job postings which fit my career path so far, I was applying to
everything that I had the skills for, even if those skills were rusty or
quite junior. But, by the beginning of December, all I had to show for it was
a pile of rejections (in fairness, not a single company ghosted me), an
interview that ended in a rejection, and a pending application to
a German language course at <a href="https://en.wikipedia.org/wiki/Cologne_University_of_Applied_Sciences">TH
Köln</a>
just in case I really couldn&#8217;t find a job. It didn&#8217;t help that I was
only able to access a relatively small portion of the available job
market since many jobs required at least B2&#47;C1-level German (especially
in my field), and I was probably only high-A2&#47;low-B1 on the best of
days.</p>
<p>I started to feel pretty dejected with my pile of rejections and the
stress was mounting as the deadline for my 90 days was quickly
approaching. While there were still a few options remaining that would
let me remain in the country, by this point I felt like my future in
Germany was totally uncertain. We made an informational appointment
at the Ausländerbehörde (Foreigner&#8217;s Authority) where we at least
figured out what all the possibilities were, but it pretty much hinged
on the same things that I was trying already: get a job, study at
university, or do a language course.<sup id="fnref2"><a href="#fn2" rel="footnote">2</a></sup></p>
<p>As a semi-last resort, I booked another appointment at the
Ausländerbehörde for the day before my deadline to see if I could get
a Fiktionsbescheinigung (Fictitious Certificate) which is a document
that would allow me to stay up to an extra 6 months so I could continue
my search for a residence permit. From what we understood, this is
normally granted to people who already have a pending application so
they can legally stay in the country while it&#8217;s still processing, so
I had no idea if I was even allowed to be granted one. However, it is
possible to apply for a resident permit by physical mail, so, about
a week before my appointment, I mailed a large envelope with my
documents (university degree, pending university application, and so on)
and a letter explaining my situation and intentions to the office, and
hoped for the best.</p>
<p>Thankfully, that seemed to work. The person at the Ausländerbehörde was
understanding of the situation and recognised that I was trying to apply
for a residence permit but needed more time to figure out what exactly
I would be applying for, so they granted me the certificate. That at
least took the stress levels down several notches; I had another
6 months to find a job, and if I had no luck at least it would be enough
time for my university application to go through so I could start the
language program. Later that week I received a letter in the mail
notifying me of an appointment at the Ausländerbehörde set for the end
of January 2024 with a list of documents to bring, and that was my new
(soft) deadline to figure out what I would be doing.</p>
<p>But remember that job I applied to when I first arrived? Around the time
the above was going on, I received a personalized email asking me to
re-apply to the position. Apparently when I had originally applied they
had a candidate most of the way through the hiring process and decided
to go with them, but it didn&#8217;t work out and they were re-opening the
position. Not only was this the job that most closely matched my
previous experience, it was also one of the most interesting ones
I applied to. I was still skeptical I&#8217;d even get it since the job
posting listed a hybrid work arrangement in their offices in Munich and
we had already been living in Aachen for some months, but I figured
&#8220;Well, why not, what&#8217;s the worst that can happen?&#8221; and re-applied to the
position.</p>
<p>Within a week I heard back and got the first of three interviews. Turns
out they were totally fine with almost-fully remote work as long as
I was open to coming in for the occasional all-hands meetings and in
case of emergencies and so on. So, hey, maybe it would work out after
all.</p>
<p>The same evening after I did the first interview, I got a message from
the next interviewer asking me if I was free for an interview the next
day, to which I said yes and attended. After that interview though,
I started doubting that I would get the job. They asked a lot of
questions about Windows and I hadn&#8217;t done much work with Windows in my
career so far, so things felt like they went pretty rough even though
I thought I was able to answer other questions pretty well.</p>
<p>Thankfully, a few days after the second interview I got an email asking
me to attend the third and final interview which consisted of doing
a 20-minute presentation in front of the whole team about an IT
security-related topic of my choosing. I did my presentation at the end
of December, just before the holiday period started, and things seemed
to go very well. (In case you&#8217;re wondering, my presentation was about
the security features of OpenBSD, because of course I had to.) I was
told that it might take a while to get back to me, so I hung tight.</p>
<p>The holiday period came and went, with me feeling pretty alright given
the feedback from the final interview. We celebrated Christmas, attended
<a href="https://events.ccc.de/congress/2023/infos/index.html">37C3</a>, met some
friends for the first time that we had only ever known from the
fediverse<sup id="fnref3"><a href="#fn3" rel="footnote">3</a></sup>, had friends over to celebrate the new year, and all
the while I was waiting for a response.</p>
<p>In early January, a little bit after the holiday period, I received the
final verdict: I got the job! I had a little information session with
someone from HR, signed and sent back the work contract, and contacted
a public health insurance provider to get that sorted.</p>
<p>Come the day of my assigned appointment at the Ausländerbehörde,
I packaged up everything I needed to apply for an EU Blue Card and
headed there. As soon as I showed the employee my work contract, it
seemed like a switch flipped and everything instantly became easy. The
employee took a copy of the contract, asked me a few questions, typed
some information into some forms, had me go pay the fee for the
application, and handed me a paper document that I could use as my Blue
Card before the actual physical Blue Card arrived, all within about 15
minutes. They told me that it would take about 4-6 weeks for the Blue
Card to be available for pickup, but otherwise everything was set.</p>
<p>It actually took only 2 weeks for the Blue Card to become available!
Which was convenient because I only had a few weeks before I needed to
travel to Munich to spend my first 2 weeks of work getting acquainted
with the team and things before I could be fully remote.</p>
<p>In the roughly 6 months since then, things have been great. I continued
integrating: opening savings accounts at my bank, converting my Ontario
driver&#8217;s license into a German one, buying a BahnCard, slowly learning
more German, and so on. My goal now is to learn German to the C1 level,
apply for permanent residency, and then eventually apply for
citizenship. While the journey getting here was a bit rough, things
worked out very well in the end, and I can see myself living in Germany
forever.</p>
<p>Feel free to ask me any questions you have about this process or what
life is like in comparison and, if you&#8217;re willing, I&#8217;ll add them below.</p>
<h2 id="assorted-questions-answered-aqa">Assorted Questions, Answered (AQA)</h2>
<p><strong>Q: How&#8217;s the poutine?</strong></p>
<p>A: Very good actually. There&#8217;s a chain called <em>Frittenwerk</em> here which
do poutine and poutine-inspired dishes, and it&#8217;s very good. No complaints.</p>
<p><strong>Q: How does the use of cash and card differ? I heard that Germany still uses a lot of cash.</strong></p>
<p>A: I&#8217;ve heard this as well, but I found no issues paying by card at any
major shop. I have encountered smaller independent shops like Kiosks
which only accept card if you spend above a certain threshold to avoid
the card payment fees eating an entire transaction, but it&#8217;s usually not
a problem since I carry around some cash anyways. The minimum-threshold
thing was common in Canada for a while too, but now everyone just
accepts card and small shops these days are going almost entirely
cash-free.</p>
<p>Personally, I don&#8217;t understand why people are so horny for cash-free
societies. Cash is difficult to trace (i.e. privacy respecting),
facilitates easy person-to-person transactions without a middleman, and
is subjectively nicer to use than a card. Card payments are convenient,
but I worry how much data is being collected and sold by vendors and
payment processors. Also depending on systems like these is risky when
you can have things like the Crowdstrike incident or a country-wide
telecom outage (happened twice in Canada) totally cripple the system.</p>
<p>That being said, please get rid of your 1¢ and 2¢ coins, EU. They&#8217;re
practically useless at this point. Canada did it and it made cash quite
a bit nicer to handle.</p>
<p><strong>Q: How antiquated is the bureaucracy here? Did you have to use a fax machine?</strong></p>
<p>A: It doesn&#8217;t feel antiquated to me. So far my experience has been
pretty unremarkable. Processes have felt reasonable and normal compared
to what I&#8217;m used to in Canada. Actually, in some ways they&#8217;ve been
better, such as when I chose my health insurance provider where I was
able to do everything over e-mail and through their website, and then the
health insurance card and information showed up in my mailbox a few days
later. Opening a bank account could have been similarly easy (even at
the local Sparkasse, a public bank which has the reputation of being
antiquated compared to many private banks) but I decided to go in
person because it&#8217;s nice to have someone to ask questions to.</p>
<p>Aside from that, watching my wife renew her license plate looked similar
to how we would do it in Ontario, going to convert my driver&#8217;s license
was the same as how we&#8217;d do it in Ontario, applying to university was
very similar to how it&#8217;s done in Ontario, and the processes for
obtaining a residence permit seemed totally fine. And no, I have not had
to use a fax machine. The only thing I encountered that I&#8217;d like to see
improved is not having to go in person to register yourself as living at
a new address, but it also wasn&#8217;t that hard to find an appointment and
not that big of a deal.</p>
<p><strong>Q: How does the public transport compare?</strong></p>
<p>A: Oh it&#8217;s leagues better than in pretty much any Canadian city. We live
in Aachen which unfortunately only has a bus network (for now; a tram is
in the planning stages), but the public transit has been stellar in
pretty much every city I&#8217;ve been to when I compare it to my experience
in Toronto, Ottawa, or Montreal. Admittedly, my standards are not super
high after living in Ottawa where the <a href="https://en.wikipedia.org/wiki/Confederation_Line">backbone of the public
transportation
network</a> turned into
a failed infrastructure project with multiple continuous months of
downtime (including during the period when we were moving out), but
still.</p>
<p>The regional and long distance public transit (S-Bahn, RE, RB, IC, and
ICE trains) has also been just an infinite improvement over the
incredibly limited service we have in Canada. I&#8217;m used to taking a 4.5h
train trip from Ottawa to Toronto (350km point-to-point) for a minimum
of $50 (cheapest possible ticket booked several months in advance) via
a diesel-electric locomotive running on rented single-track freight
lines with lower priority than the freight trains, so being able to go
from Aachen to Berlin (540km point-to-point) in about 6 hours in <strong>first
class</strong> on a comfortable high speed train for like 40€ (booked about
a month in advance) is incredible.</p>
<p>Hell, even just basic busses are better. They&#8217;re far more comfortable
and modern-feeling than most of the busses I&#8217;ve ever taken in North
America.</p>
<p>The system is not without its issues, of course (this is something
you&#8217;ll hear Germans complain about <em>a lot</em>). I have experienced the
delays and track reassignments and service cancellations and so on, but
the service remains by far and away better than in most other places in
the world.</p>
<p>Overall&#8230; 8&#47;10 would train again.</p>
<p><strong>Q: How welcoming are the Germans?</strong></p>
<p>A: Pretty welcoming, I think. I haven&#8217;t had any bad encounters, people
have been nice and friendly to me, and nobody has gotten annoyed when
they hear my accent or made rude comments or anything like that. The few
times I&#8217;ve asked if it was okay to switch to English were also totally
fine. Everyone at my job has been very nice as well. I really have
nothing to complain about.</p>
<p><strong>Q: How are the neighbours?</strong></p>
<p>A: The neighbors have been largely good. Each one that we&#8217;ve met has
been quite friendly and they haven&#8217;t caused any major issues or been
particularly noisy. We have encountered instances of neighbors throwing
plastic-bagged waste in the organic waste bin, people being a bit messy
in the laundry room, and people leaving their cars in inconvenient
places while they get up to whatever shenanigans neighbours get up to,
but really nothing major; just typical neighbour things.</p>
<p><strong>Q: How helpful were the immigration services (language, patience, etc.)?</strong></p>
<p>A: Surprisingly helpful. I expected them to be much more stern and
serious, but all five people I encountered through the process were
polite and friendly, especially the person who was handling my Blue Card
application. They were all trying to be of help with explaining my
options and how things worked and so on, and everyone spoke pretty good
English except for the person I encountered when I went to pick up my
physical Blue Card, but that interaction was easy enough that I didn&#8217;t
have a problem doing it in German.</p>
<p><strong>Q: How did you pick which city to move to?</strong></p>
<p>A: That was just determined by my wife finding a job before me. We just
chose the city where her job is.</p>
<p>We could have moved to a smaller village or to a much larger city like
Cologne, but we like cities that are about the size of Aachen. They seem
to provide a good mix of connectivity and big-city amenities, while not
feeling too busy or crowded (except during the Christmas market here,
good lord).</p>
<p><strong>Q: What about health insurance?</strong></p>
<p>A: I won&#8217;t go into all the details I learned about the German health
insurance system here, but I can give you my brief story: I was using
travel insurance before I had any kind of residence permit and then,
once I got my job, I switched over to a proper public health insurance
provider (public health insurance is not administered directly by the
state, but by special organisations which are classified as
<a href="https://de.wikipedia.org/wiki/K%C3%B6rperschaft_des_%C3%B6ffentlichen_Rechts_(Deutschland)"><em>Körperschaft des öffentlichen
Rechts</em></a>
which are basically like a for-the-public-good-but-not-nationalised
utility company). The whole experience was quite easy and my health
insurance company has English-speaking representatives who have been
able to answer any questions I&#8217;ve had about what is or is not covered.</p>
<p>(You do also have the option of completely leaving the public health
insurance system and opting for a private health insurance provider, but
this comes with its own set of caveats and regulations and all that.)</p>
<p>I&#8217;m not sure what else to say about it. It&#8217;s been a pretty painless
experience so far and I&#8217;ve found that it covers a decent chunk more than
public health insurance does in Canada (e.g. dental checkups are
covered, more forms of therapy are covered, and prescription drugs are
covered with a tiny 5€ deductible).</p>
<p><strong>Q: Do you have a library card yet?</strong></p>
<p>A: Yep! One of the interesting differences is that in the USA and Canada
public library cards are ostensibly free, but in Germany you have to pay
a small yearly fee. In Aachen it&#8217;s 15€&#47;year, which isn&#8217;t bad (it&#8217;s also
free for certain groups of people), but also is a bit strange that it&#8217;s
not just included in taxes.</p>
<p>Also libraries in different cities have different opening hours,
policies and other fees. For example, in Aachen it costs an extra 2€ if
you want to borrow something marked as a &#8220;Bestseller&#8221;, 1€ if you want to
reserve something, and the opening hours aren&#8217;t <em>that</em> great. Also, the
foreign language section is quite limited, so I don&#8217;t get much use out
of the card at the moment.</p>
<p>The RWTH Aachen university library is probably where I would need to go
to find English-language books and they have way better opening hours,
so if I wanted to study somewhere I would try to go there.</p>
<p><strong>Q: How do you even determine if you can just&#8230; move there and live
there (indefinitely)?  Were there government sites you checked, or some nice
unofficial resources that summarized &#8220;requirements&#8221;&#47;technicalities like
that?</strong></p>
<p>A: The site
<a href="https://www.make-it-in-germany.com/en/">make-it-in-germany.com</a> was
a very helpful resource for figuring out what kind of visa&#47;residence
permit options exist for citizens of various countries, and they provide
some information and resources for finding jobs, language courses, and
so on.</p>
<p>So I researched my residence permit options, found the one that fit me
best (and chose a backup) and then went for it. The people at the
Ausländerbehörde were actually very helpful, telling me exactly what
my options were and what I would need, so if I was unsure about anything
I could always book an informational appointment (which I found to be
readily available) and ask my questions there.</p>
<p>Turns out it can be surprisingly easy to just go and live in another
country, especially when you get a job in an in-demand field.</p>
<p><strong>Q: What was the border experience like?</strong></p>
<p>A: It was very simple actually. We went up to the border officer
together and explained exactly our intentions—that my wife was returning
to her home country after studying in Canada and I, her partner, was
intending to immigrate to live with her in Germany, with the goal of
finding a job. The border officer asked a few questions like what my
field of work was and where we were intending to live, then wished us
good luck and sent us on our way.</p>
<p><strong>Q: How do you cope with the language barrier?</strong></p>
<p>A: There isn&#8217;t actually that much of a language barrier. Germany is
rapidly becoming more English-friendly and in the few places&#47;situations
where English fails, well&#8230; I get my wife to help as I slowly learn the
language 😅.</p>
<p>It was very helpful to have had prior German knowledge before emigrating
from taking three semesters of German in university. That put me around
the upper end of the A2 level which is enough to get by in daily life.
I also picked up lots of common phrases used in shops and announcements
just by being exposed to them constantly. For more complex things like
going to the dentist, I&#8217;ve had my wife accompany me since I am
definitely not at the level where I could explain or understand German
in something like a medical context. Even so, the dentist I saw spoke
English very well, and I could fill out the first-time patient forms in
English, it&#8217;s just the dental hygienist who did not speak English.</p>
<p>Also the larger the city you&#8217;re in (e.g. Munich, Hamburg, Cologne,
Frankfurt, Berlin), the more likely that the people you come across will
know at least enough English to have a simple conversation with you. In
large cities that are especially popular with expats who come to work
for a few years it&#8217;s usually possible to do almost everything in English
without learning much German at all, as long as you don&#8217;t want to
actually settle here permanently.</p>
<p><strong>Q: Do you miss the niceness of Canadian people?</strong></p>
<p>A: Not really? I haven&#8217;t found Germans to be rude or cold or anything
like that compared to Canadians. I know that the state I live in, North
Rhine-Westphalia, is known for having people who are more friendly than
in other states, but I also haven&#8217;t found people to be particularly
different elsewhere in Germany. People tend to match whatever energy you
give off, so as long as you aren&#8217;t rude&#47;cold&#47;scowling yourself then I&#8217;ve
found that others aren&#8217;t either.</p>
<p><strong>Q: How does it feel to get far far away from American influence?</strong></p>
<p>A: VERY EXTREMELY GOOD.</p>
<p>Okay we&#8217;re not <em>that</em> far. American media and cultural influence is
pervasive across the world, but it&#8217;s really nice to not live in a place
where a sizeable portion of the population buys so heavily into American
politics and media to the point that they don&#8217;t even know how their own
country works, and instead just start parroting American brainrot.
There&#8217;s a thing someone somewhere said sometime that goes like: &#8220;when
America sneezes, Canada catches a cold,&#8221; and that&#8217;s just about the most
accurate way to describe things, going as far as heavily influencing the
decisions Canadian judges make when they have no Canadian precedent to
lean on.</p>
<p>I wrote more here, but I was just ranting, so I&#8217;ll leave it at that!</p>
<p><strong>Q: Is there something from Canada that you miss here?</strong></p>
<p>A: Not&#8230; not really? I know that&#8217;s maybe a weird thing to say but every
time people have asked me that question I just can&#8217;t come up with
anything I actually truly miss. My wife tells me she misses being able
to easily buy Better than Bouillon, clothes from Roots, fresh kimchi
from the Korean store, and the large farmer&#8217;s&#47;handcrafts market at
Lansdowne Park. But like I dunno I can get maple syrup here and we can
make our own kimchi so it&#8217;s fine.</p>
<p>Except, well&#8230; now that I&#8217;m thoroughly divorced from the environment
that I grew up in I&#8217;m realising that perhaps there is something about
Canada that I miss: the promise of what life could have been.</p>
<p>Growing up, I developed a certain perception of Canada through the media
I consumed and the things I encountered during my education that gave me
an idea of what life should have been like when I got older. A vision of
going to university, finding a good job, buying a home within a few
years, being able to afford to go on regular vacations, living in a good
community with a sense of neighborliness, and so on. A vision of
a well-functioning country in which one could easily live a good and
fulfilling life; the way the older generations in my family could.</p>
<p>None of that exists anymore though. At least not for my generation.
Perhaps my perceptions were being clouded by some of that nationalistic
pride that governments love to impart on their citizens, but when I look
around today all I can see is the crumbling of nearly every national,
provincial, and municipal institution as a result of corporate and
political greed; roads being left to decay for years before being
haphazardly patched over; people struggling to pay for basic things like
food and shelter; rates of homelessness and mental health crises through
the roof; entire generations locked out of the prospects of being able
to move out on their own, let alone buy a home; and communities becoming
more and more poisoned by toxic politics. A stagnation, even
a regression, in the development of the country. One that shows no signs
of stopping anytime soon.</p>
<p>Every time I interact with something from before 2000—a bit of radio
equipment that says &#8220;Made In Canada&#8221;, a documentary from a much more
official sounding CBC, <a href="https://www.paritybit.ca/blog/the-diefenbunker-museum/">a government project from a bygone
era</a>—I can&#8217;t
help but feel like we&#8217;ve lost some kind of drive, some kind of national
identity, some sense of the reason why we were considered important
enough to be invited into the G7. It feels like everyone is living
wearing rose-tinted glasses, watching re-runs of the
Canada-that-used-to-be while their house is falling apart around them.</p>
<p>I don&#8217;t think this is unique to Canada. In fact, this seems to be
happening across practically the entire West. Though, to what extent in
all the different countries I can&#8217;t really say. What I can say though is
that while Germany may share some common problems, things do not feel as
dire here, nor do they feel like they&#8217;re actively collapsing under the
hopeless death march of neoliberalism.</p>
<div class="footnotes">
<hr/>
<ol>

<li id="fn1">
<p><a href="https://www.wave-gotik-treffen.de/english/">Wave-Gotik-Treffen</a>, one of the largest festivals celebrating a variety of subcultures including goth, steampunk, cybergoth, and with a medieval market and plenty of concerts of an even wider variety of genres.&#160;<a href="#fnref1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn2">
<p>My wife and I were not married at this point and Germany does not provide anything like a common law partnership residence permit, so that was not an option.&#160;<a href="#fnref2" rev="footnote">&#8617;</a></p>
</li>

<li id="fn3">
<p>Fun fact, my social circle on this continent is made up almost entirely of people that I had only known on the fediverse before coming here.&#160;<a href="#fnref3" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
		]]></content>
	</entry>

	<entry>
		<title>Computers as Workspaces</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/computers-as-workspaces/" />
		<id>http://www.paritybit.ca/blog/computers-as-workspaces/</id>
		<updated>2023-05-09T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="computers-as-workspaces">Computers as Workspaces</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2023-05-09</p>
<p>I came across a page on Dave Gauer&#8217;s site<sup id="fnref1"><a href="#fn1" rel="footnote">1</a></sup> about how he
treats different computers as different physical
workspaces<sup id="fnref2"><a href="#fn2" rel="footnote">2</a></sup>. That, along with Josh Ginter&#8217;s post on
keeping a separate creativity
computer<sup id="fnref3"><a href="#fn3" rel="footnote">3</a></sup>
and Alexander Cobleigh&#8217;s post on making a social media
computer<sup id="fnref4"><a href="#fn4" rel="footnote">4</a></sup> helped me to put
words to the habits I&#8217;ve found myself falling into.</p>
<p>Like Ginter, I seem to have a kind of mental block when it comes to
being able to easily dive into and stay focused on things like writing,
long programming sessions, or reading long-form content on my &#8220;primary&#8221;
computer and it&#8217;s hard to articulate why. This mental block doesn&#8217;t
exist at all when I use my laptop, leading me to use it instead for
those tasks.</p>
<p>My desktop computer, with its large 4K monitor and recent CPU and GPU,
feels great for doing stuff that fits well on a large screen such as
podcast editing or graphics work, but when it comes to concentrating for
long periods of time on text-based tasks I find it awkward and tiring.
I also tend to use the desktop extensively for entertainment—playing all
manner of video games, socializing with friends, and watching various
shows, conference talks, and videos—which might be a reason why it feels
difficult to concentrate on the kinds of tasks that don&#8217;t provide
a constant dopamine drip while using it.</p>
<p>Not to say that I can&#8217;t use it for those &#8220;more productive&#8221; tasks; it
just seems to take some outside pressure (like an imminent deadline) for
that mental block to become less of a force compared to the need to get
the task done, and it&#8217;s not a very comfortable or enjoyable process as
a result.</p>
<p>On the other hand, my laptop, despite its smaller screen and more
compact package, doesn&#8217;t seem to cause me the same level of fatigue.
Even when working at the same desk and sitting in the same chair I&#8217;ve
found myself much more able to dive into long-form tasks and stay
focused on them when using it. For example, I&#8217;ve been able to wake up
and immediately get right to work on my laptop without any sort of
spool-up period, but that would always seem to be a struggle with my
desktop. I&#8217;ve also been able to sit in front of it for a near six hours
straight working on something that I&#8217;m passionate about, which I could
never bring myself to do on my desktop. (Also, I&#8217;ve come to prefer the
snappy feel of my laptop keyboard, especially when writing lots of
text.)</p>
<p>And, even when I do take longer breaks while using my laptop, I can
actually re-focus easily after taking those breaks instead of going down
another YouTube rabbit hole like I used to on my desktop because I just
couldn&#8217;t bring myself to get back into long-form work on what is
ostensibly my &#8220;entertainment device&#8221;.</p>
<p>So, there seems to be something to this idea. That, much like having
a separation between physical &#8220;work&#8221; and &#8220;play&#8221; environments leads to
being better able to keep the two separate with both mental health and
focus benefits, the same seems to be true when it comes to using
different computers for different purposes, even when the actual
physical environment around me doesn&#8217;t change.</p>
<p>Plus, setting up those different computers with different environments
optimized—or at the very least tuned—for some particular set of tasks
makes it easier to concentrate and stay focused on those tasks when in
that environment and provides even more of a separation between
a computer that is used for play and one that is used for work.</p>
<p>As Gauer mentions, this idea might seem a bit extravagant and wasteful,
considering that there are many who can hardly afford one computer, let
alone several. He mentions that relatively powerful computers are quite
inexpensive these days, especially on the second-hand market, but I&#8217;d
also like to add that a separate physical computer might not even be
necessary. If you are strapped for cash or simply don&#8217;t want another
<em>thing</em> in your life, a separate user account with a different set of
programs installed and a different look and feel on the same physical
computer might also work.</p>
<p>If you&#8217;ve noticed the same trouble getting or staying focused on tasks
using the same device you commonly use for entertainment, perhaps give
this a try and <a href="mailto:jbauer@paritybit.ca">let me know</a> how it works
out. If you have any tips to share about using computers this way I&#8217;d be
happy to hear them too.</p>
<p>Until next time,<br>
~jbauer</p>
<div class="footnotes">
<hr/>
<ol>

<li id="fn1">
<p><a href="http://ratfactor.com">http:&#47;&#47;ratfactor.com</a>&#160;<a href="#fnref1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn2">
<p><a href="https://ratfactor.com/cards/computers-as-workspaces">https:&#47;&#47;ratfactor.com&#47;cards&#47;computers-as-workspaces</a>&#160;<a href="#fnref2" rev="footnote">&#8617;</a></p>
</li>

<li id="fn3">
<p><a href="https://thenewsprint.co/2022/03/28/keeping-a-separate-creativity-computer/">https:&#47;&#47;thenewsprint.co&#47;2022&#47;03&#47;28&#47;keeping-a-separate-creativity-computer&#47;</a>&#160;<a href="#fnref3" rev="footnote">&#8617;</a></p>
</li>

<li id="fn4">
<p><a href="https://cblgh.org/social%20media%20computer/">https:&#47;&#47;cblgh.org&#47;social%20media%20computer&#47;</a>&#160;<a href="#fnref4" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
		]]></content>
	</entry>

	<entry>
		<title>OpenBSD on the Dell XPS 13 9380</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/openbsd-on-the-dell-xps-13-9380/" />
		<id>http://www.paritybit.ca/blog/openbsd-on-the-dell-xps-13-9380/</id>
		<updated>2023-03-17T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="openbsd-on-the-dell-xps-13-9380">OpenBSD on the Dell XPS 13 9380</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2023-03-17</p>
<p>(Yes, I totally ripped off <a href="http://jcs.org">jcs&#8217;</a> format for this.)</p>
<p>It&#8217;s been a while since I had a laptop with any semblance of computing power
that I actually enjoyed using.</p>
<p>Back in 2021, I ditched my Thinkpad T420s for a Mid-2009 MacBook Pro and
an old 2008-era netbook, both with Core 2 Duo series processors.
Although the MacBook is still usable for most non-browser-heavy tasks,
I just fell in love with portability of the netbook which led me to see
if I could find a newer, more powerful laptop that would fit my
preferences. I created <a href="/garden/notes/laptops-i-might-like/">this page</a>
to compare laptops that looked like they might fit what I wanted.</p>
<p>Basically, I wanted a laptop that was small, thin, and lightweight, but
also high quality and not too expensive. I don&#8217;t need a ton of
performance, I didn&#8217;t want to spend a lot of money, and I prefer not
buying new things whenever I can, so I opted to get something from the
used market. I hopped on eBay, did a whole lot of searching, and
eventually landed on this.</p>
<p><img loading="lazy" src="xps.jpg" alt="A Dell XPS laptop lying closed at an angle on a table."></p>
<p>With this new laptop I&#8217;ve launched myself 10 years into the future&#8230; from 2009
to 2019!</p>
<h2 id="table-of-contents">Table of Contents</h2>
<ul>
<li><a href="#hardware">Hardware</a></li>
<li><a href="#firmware">Firmware</a></li>
<li><a href="#power-and-heat">Power and Heat</a></li>
<li><a href="#openbsd-support-log">OpenBSD Support Log</a></li>
<li><a href="#current-openbsd-support-summary">Current OpenBSD Support Summary</a></li>
</ul>
<h2 id="hardware">Hardware</h2>
<p>The Dell XPS 13 9380 is another laptop in Dell&#8217;s revered XPS line. Known for
excellent build quality, nice keyboards, beautiful screens, and good battery
life, this model doesn&#8217;t disappoint. I managed to snag a version with an Intel
i7-8665U, 16GB of RAM (soldered), a 256GB SSD, a 1080p touchscreen display, and
a dead battery; all for a very reasonable price and in great physical
condition.</p>
<p>The dead battery is probably how I was able to get such a recent, fairly
high-end machine for only C$500 ($365 USD on 2023-03-16) before shipping and
taxes (an additional C$90) where comparable models were at least C$150 more
expensive. I have ordered a replacement 52WHr battery (C$60), but until it
arrives I can rely on being plugged into the wall and hibernating whenever
I need to move.</p>
<p>The chassis is made of CNC machined aluminium and the palm rest of a soft,
comfortable carbon-fibre composite material. The build quality is excellent;
reminiscent of MacBooks. It also has minimal yet tasteful branding in the form
of an encircled Dell logo on the lid and silver &#8220;DELL&#8221; text in the middle of
the bottom display bezel. The palm rest does have a tendency to pick up
fingerprints, but it&#8217;s easily cleaned.</p>
<p>On the right side of the laptop is a headset jack, a USB Type-C port, a micro
SD card slot, and a speaker.</p>
<p>On the left side of the laptop is a security cable slot, two Thunderbolt
3-enabled USB-C ports, a battery charge status button and indicator, and
another speaker.</p>
<p>The laptop can be charged and can output to an external display using any of
the three USB-C ports. The Thunderbolt 3 ports would theoretically let me plug
in an external GPU if I wanted to do away with <a href="/uses#workstation">my desktop</a>
altogether, but that wasn&#8217;t a consideration when I got it.</p>
<p>The speakers are nothing stellar. They sound a bit blown out at max volume and
don&#8217;t have a great bass response, but they don&#8217;t sound terrible either and work
in a pinch. They sound like they respond best in the mid-range, which is where
most human voices land, and they performed quite well when listening to
a podcast at about 65% volume.</p>
<p><img loading="lazy" src="xps-open-on.jpg" alt="The laptop open and on, showing this blog post in a vim window." ></p>
<p>There is a really small 720p webcam at the top of the display providing
a decent enough picture quality. I&#8217;m glad this is at the top of the display and
not at the bottom looking up into the user&#8217;s nose, unlike on previous models.
There is also an array of four microphones at the front of the palm rest, just
above the charge indicator light, which provides audio of an acceptable level
of quality. Both are disabled by OpenBSD by default and can be disabled in the
BIOS.</p>
<p>The 13.3&#8221; 1920x1080 glossy, touchscreen display looks crisp, vibrant, and
clear. Despite it only having 165 PPI, it&#8217;s sharp from reasonable viewing
distances and has the added bonus of using much less power than the alternative
3840x2160 display. The display can reportedly reach a peak brightness of 400
nits, but I use it at about 10-20% brightness when indoors. It is by far the
best display I&#8217;ve had on a laptop. I would have preferred a 16:10 or 3:2 aspect
ratio, but that&#8217;s only recently come back in vogue so I would have had to pay
twice the price or more for a laptop with that feature.</p>
<p>The hinges of the display are stiff and don&#8217;t wobble at all when typing or when
moving the laptop around. They are still loose enough that you can mostly open
the laptop with one hand, though it will start to tip backwards when the
display is approaching 80°. The screen also closes with a satisfying thud.</p>
<p>The keyboard is Dell&#8217;s typical, crisp, chiclet-style keyboard that was common
across all their XPS laptops until more recent models. I enjoy the tactility of
the keyboard, which doesn&#8217;t flex at all during normal typing.</p>
<p>The trackpad feels soft and smooth, though the physical click noise is a bit
loud and high pitched as opposed to a satisfying clunk like on MacBooks. This
isn&#8217;t such a big deal though since tapping works just fine.</p>
<p><img loading="lazy" src="xps-keyboard.jpg" alt="A top-down view of the keyboard of the laptop."></p>
<p>There is no audible coil whine or fan noise at idle. When the laptop is under
heavy load, the fan does noticeably spin up but stays relatively quiet.
Ultimately, I would have preferred something fanless, but the fanless laptops
I could find that also satisfied all of my other preferences were quite
expensive.</p>
<p>Wireless connectivity is provided by a soldered Intel Wireless-AC 9260 WiFi
5&#47;Bluetooth 5 chipset, which is unique to models of this laptop which come with
an i5-8365U or i7-8665U processor. In models newer than the XPS 13 9350, XPS
laptops have come with soldered Intel Killer WiFi chipsets which are not
supported on OpenBSD. This model is unique out of the newer XPS lineup in that
it has this other WiFi chipset option; neither the preceding or succeeding
models seem to have it.</p>
<p>The NVMe SSD is a 256GB Micron 2200S in a removable m.2-2280 form factor. I use
256GB SSDs in almost all of my machines, so this size is adequate for me, but
I can always upgrade the storage if I need to in the future. I ran
CrystalDiskInfo on Windows 10 before wiping the drive, and it reported that the
SSD has about 84% of its life remaining with ~15TB written to it so far.</p>
<h2 id="firmware">Firmware</h2>
<p>Pressing F2 at the boot splash screen will take you into the BIOS Setup menu.
The 9380 has Dell&#8217;s typical Windows 7-styled graphical BIOS which is fine and
does the job. There are plenty of options available from battery management to
turning off ports and peripherals.</p>
<p>As usual, Secure Boot must be disabled in order to boot OpenBSD.</p>
<p>You can select a temporary boot device or access other functions by pressing
F12 at the boot splash screen.</p>
<p>There is also an embedded diagnostics tool which will run the hardware through
various tests. I&#8217;m not sure how good this is at detecting most faults, but it
is a nice thing to have to quickly check that all the hardware is most likely
working (it did yell at me about the battery).</p>
<h2 id="power-and-heat">Power and Heat</h2>
<p>One very important thing that I want from my laptops is for them to not get too
hot or too loud. That is one of the main reasons I stopped using old Thinkpads.</p>
<p>This model performs admirably. During light workloads the fan is silent or
inaudible in my typical working environments and is quick to spin down after
heavy loads. When the fan is spinning, it doesn&#8217;t produce an annoying or high
pitched sound, just a noticeable &#8220;whooshing&#8221;.</p>
<p>At idle, the XPS 9380 sits around 45°C, probably because the fan is not
programmed to ramp up until the processor gets warmer. I am fine with this
behaviour, as it means that my regular workloads are not likely to make the fan
spin up. Also, I can run the laptop at minimum clock speeds using <code>ampd -L</code>, in
which case the fan almost never comes on and I don&#8217;t notice any drop in
performance for most of the things I do with the machine.</p>
<p>During normal use, the underside of the laptop gets warm, but not at all hot.
The temperature of the palm rest and keyboard does not noticeably change.</p>
<p>I&#8217;ll have to wait until the new battery comes in before getting an accurate
measure of battery life, but for now I measured the laptop pulling about 11.5W
from the wall during my normal use, and 27W with the screen at full brightness
while running:</p>
<pre><code>stress --cpu 4 --vm 4 --vm-bytes 1024M
</code></pre>
<p><em>Update 2023-03-14:</em> The new battery has arrived. I installed it
(alongside a quick clean-out of the fans and heatsink) and did a full
charge, followed by a discharge to 0%, followed by a charge back up to
full in order to calibrate it. As far as power draw, it looks like
OpenBSD draws roughly 8-9W at idle and Linux can go as low as 1.5-2W.
This makes sense given that OpenBSD does not implement a lot of the
powersave functionality in most (if not all) of its drivers. Battery
life is roughly 5-6 hours depending on workload and screen brightness.
Linux would last longer if the computer would spend more of its time
idling, but in practice OpenBSD and Linux tend to get around the same
battery life with Linux maybe eking out an extra hour.</p>
<h2 id="openbsd-support-log">OpenBSD Support Log</h2>
<p><strong>2023-03-14</strong>: The only thing that didn&#8217;t work well out of the box was
resuming from sleep or hibernation. When doing so, the screen would turn on,
the laptop would appear to try to draw to the screen (various lines and columns
in the text mode console were replaced with black), but the laptop would freeze
completely, stop responding to any input, and could only be reset by holding
the power button down until the laptop turned off.</p>
<p><strong>2023-03-15</strong>: After a good bit of research, I stumbled upon this
<a href="https://marc.info/?t=163889280400001&amp;r=1&amp;w=2">openbsd-bugs thread about the Framework
laptop</a> which had a solution that
worked.</p>
<p>It turns out that disabling at least one of the devices handled by the <code>dwiic</code>
driver causes resuming from sleep and hibernation to work properly again. The
two <code>dwiic</code> devices I see are <code>dwiic0</code> corresponding to <code>ELAN2931</code> (the
touchscreen) and <code>dwiic1</code> corresponding to <code>DELL08AF</code> (the trackpad). Because
the trackpad still works without <code>dwiic1</code> being active (it gets handled by the
<code>pms</code> driver instead), I opted to just disable that and leave the touchscreen
working. Of course, disabling <code>dwiic</code> outright also fixes the issue, but leaves
me without a working touchscreen.</p>
<p>This is the command I ran to make the changes permanent (though I do have to
repeat it every time I <code>sysupgrade(8)</code> to a new kernel):</p>
<pre><code>$ doas config -ef &#47;bsd
ukc&#62; find dwiic
226 dwiic* at pci* dev -1 function -1 flags 0x0
448 dwiic* at acpi0 flags 0x0
ukc&#62; change 226
226 dwiic* at pci* dev -1 function -1 flags 0x0
change [n] y
dev [-1] ? 21
function [-1] ? 0
flags [0] ?
226 dwiic* changed
226 dwiic* at pci* dev 0x15 function 0 flags 0x0
ukc&#62; quit
</code></pre>
<p><strong>2023-03-16</strong>: After much more testing and trying new snapshots and updating
the BIOS and so on, I <a href="https://marc.info/?l=openbsd-bugs&amp;m=167901787111102&amp;w=2">sent
a report</a> to the
openbsd-bugs mailing list using the <code>sendbug(1)</code> utility, so we&#8217;ll see what
people more knowledgable than I can make of this problem.</p>
<p><strong>2023-04-13</strong>: I also had an issue where the laptop would immediately suspend
again if I closed the lid to suspend it and then opened it back up. This issue
was also noticed and solved by Todd C. Miller, who provided <a href="https://marc.info/?l=openbsd-bugs&amp;m=168039597615891&amp;w=2">a simple
patch</a> that is now in
the OpenBSD kernel. No progress on figuring out my freeze-on-resume issue,
though Todd may also be having <a href="https://marc.info/?l=openbsd-bugs&amp;m=168073402222553&amp;w=2">a similar
issue</a>. When I get
some time, I&#8217;ll see if I can replicate the behaviour they are seeing.</p>
<p><strong>2024-09-05</strong>: My resume-from-suspend&#47;hibernate issues seem to have
been resolved in one of the latest snapshots of 7.5-current so now
I don&#8217;t have to worry about disabling one of the <code>dwiic</code> devices every
time I load a new kernel. Hooray!</p>
<h2 id="current-openbsd-support-summary">Current OpenBSD Support Summary</h2>
<p>Status is relative to OpenBSD-current as of 2023-03-17.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Works?</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Audio</td>
<td>Yes</td>
<td>Intel audio with Realtek ALC299 codec and supported by <a href="http://man.openbsd.org/azalia.4">azalia</a>. Microphone can be disabled in the BIOS.</td>
</tr>
<tr>
<td>Battery Status</td>
<td>Yes</td>
<td>52WHr battery, status available through <a href="http://man.openbsd.org/acpibat.4">acpibat</a>.</td>
</tr>
<tr>
<td>Bluetooth</td>
<td>No</td>
<td>Attaches as a <a href="http://man.openbsd.org/ugen.4">ugen</a> device but OpenBSD does not support Bluetooth. Can be disabled in the BIOS.</td>
</tr>
<tr>
<td>Fingerprint sensor</td>
<td>No</td>
<td>Goodix fingerprint sensor embedded in the power button. No OpenBSD compatibility. Can be disabled in the BIOS.</td>
</tr>
<tr>
<td>Keyboard Backlight</td>
<td>Yes</td>
<td>Supported natively by the embedded controller, including auto-dimming. Can be set to off, half, or full brightness using Fn+F10.</td>
</tr>
<tr>
<td>Hibernation</td>
<td>Yes*</td>
<td>Works with ZZZ <del>after aforementioned tweaks</del>.</td>
</tr>
<tr>
<td>NVMe SSD</td>
<td>Yes</td>
<td>Micron 2200S NVMe 256GB supported by <a href="http://man.openbsd.org/nvme.4">nvme</a>.</td>
</tr>
<tr>
<td>SD Card Reader</td>
<td>Yes</td>
<td>Works without issue. Can also boot from it.</td>
</tr>
<tr>
<td>Suspend &#47; Resume</td>
<td>Yes*</td>
<td>Works with zzz or in response to the lid closing <del>after aforementioned tweaks</del>.</td>
</tr>
<tr>
<td>Touchscreen</td>
<td>Yes</td>
<td>I2C, supported by the <a href="http://man.openbsd.org/ims.4">ims</a> driver.</td>
</tr>
<tr>
<td>Touchpad</td>
<td>Yes</td>
<td>Synaptics clickpad supported by the <a href="http://man.openbsd.org/pms.4">pms</a> driver when <code>dwiic1</code> is disabled, otherwise supported by the <a href="http://man.openbsd.org/imt.4">imt</a> driver.</td>
</tr>
<tr>
<td>USB</td>
<td>Yes</td>
<td>USB-C ports work without issue.</td>
</tr>
<tr>
<td>Video</td>
<td>Yes</td>
<td>Coffee Lake video supported via <a href="http://man.openbsd.org/inteldrm.4">inteldrm</a> for accelerated video, DPMS, backlight control, S3 resume, etc.</td>
</tr>
<tr>
<td>Webcam</td>
<td>Yes</td>
<td>Supported by the <a href="http://man.openbsd.org/uvideo.4">uvideo</a> driver. Can be disabled in the BIOS.</td>
</tr>
<tr>
<td>Wireless</td>
<td>Yes</td>
<td>The Intel AC 9260 802.11ac card is supported by the <a href="http://man.openbsd.org/iwm.4">iwm</a> driver. It works on both 2.4 and 5GHz channels.</td>
</tr>
</tbody>
</table>
		]]></content>
	</entry>

	<entry>
		<title>Styling External Links</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/styling-external-links/" />
		<id>http://www.paritybit.ca/blog/styling-external-links/</id>
		<updated>2023-03-02T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="styling-external-links">Styling External Links</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2023-03-02</p>
<p>Long time no see! While I have a few other, longer blog posts still cooking,
I figured I&#8217;d post about a cool bit of CSS I came across on <a href="http://eli.li/portal">eli_oat&#8217;s
site</a> which adds a marker to every link on a site that
points to an external domain.</p>
<p>This means that links which point to pages on the same site (or within the same
domain, if configured like that) look like this:
<a href="http://www.paritybit.ca/">paritybit.ca</a>, whereas links which point to any
external domain look like this: <a href="http://example.com">example.com</a>.</p>
<p>I find this super useful on sites like Wikipedia so that you know when clicking
a link will take you off the site or if it will just take you to another
Wikipedia article. I find it equally useful for sites that are also personal
wikis or which frequently reference a mixture of original and external content.
If that sounds like your site, I encourage you to add this bit of CSS too!</p>
<p>The original CSS as pilfered is:</p>
<pre><code>a[href^="http"]:where(:not([href*="domain.tld&#47;"]))::after {
    content: "⬈"
}
</code></pre>
<p>Which selects all <code>&#60;a&#62;</code> tags with attribute <code>href</code> beginning with <code>"http"</code>, but
not those which contain <code>domain.tld&#47;</code>, and adds an arrow symbol after the text
inside of those tags.</p>
<p>For my site, I&#8217;ve changed the arrow symbol to be skinnier (<code>U+FE0E U+2197</code>) and
made sure this only applies inside of <code>&#60;article&#62;</code> tags so that my <code>&#60;nav&#62;</code> and
<code>&#60;footer&#62;</code> are not affected. I&#8217;ve also written another small bit of CSS to make
sure that clickable images that lead to an external domain don&#8217;t have an arrow
next to them (because that looks a bit awkward). The CSS on my site is:</p>
<pre><code>article a[href^="http"]:where(:not([href*="paritybit.ca&#47;"]))::after{
    content: "︎↗"
}

figure a::after{
    content: "" !important
}
</code></pre>
<p>Images on my site are always within figure tags, and tend to be structured like:</p>
<pre><code>&#60;figure&#62;
    &#60;a href="example.com"&#62;
        &#60;img src="example.com&#47;img.png"&#62;
    &#60;&#47;a&#62;
    &#60;figcaption&#62;An image&#60;&#47;figcaption&#62;
&#60;&#47;figure&#62;
</code></pre>
<p>which is why this works for me, though this could also be done by adding
something like <code>class="img"</code> to the <code>&#60;a&#62;</code> tags and using that to select them instead.</p>
<p>If you&#8217;re using a customizable static site generator and want to make this work
without CSS, or in browsers which don&#8217;t support all these CSS features (such as
NetSurf or fairly old versions of Safari), you could add something similar to
your website build pipeline that appends the symbol to every external link.</p>
<p>Another way this can be accomplished is by using the <code>rel</code> attribute in the
anchor tag as detailed in <a href="https://text.martinmch.com/2023-03-03-re-styling-external-links.html">this post by Martin
Christiansen</a>
.</p>
		]]></content>
	</entry>

	<entry>
		<title>Free Software is an Abject Failure</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/free-software-is-an-abject-failure/" />
		<id>http://www.paritybit.ca/blog/free-software-is-an-abject-failure/</id>
		<updated>2021-11-08T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="free-software-is-an-abject-failure">Free Software is an Abject Failure</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-11-08 | <strong>Updated:</strong> 2025-06-26</p>
<div class="note"><p>Based on certain kinds of feedback I've received in
response to this post, I feel the need to say that if you disagree with
what I have written I would appreciate it if you would voice those
disagreements by criticising the ideas that I've presented rather than
assuming things about my character or level of experience and insulting
me or my work. I have no problem with people disagreeing with me and
I don't set out to "religiously convert" people to my point of view.
I appreciate having discussions about this in good faith, and hope that
you would give me the benefit of the doubt.</p></div>
<div class="note"><p>In this post, I use the term "Free Software" to
mean software licensed with Copyleft licenses, and to explicitly
differentiate it from permissively-licensed "Open Source" software
(which is what the Free Software Foundation and Co. also do).</p></div>
<p>I used to be a staunch software freedom evangelist. I used to license
all my works GPLv3-or-later and CC-BY-SA wherever I could and I used to
believe strongly in the words of Richard Stallman. I have since started
to think more about the real effects of the Free Software movement and
have changed the way I write and license my software as a result.
Although I believe FOSS as a concept is still very important, I simply
no longer believe in the Free Software movement.</p>
<p>I&#8217;ve come to the conclusion that Free Software is an abject failure.
While Free Software may on its face sound like a good concept—especially
with the kind of language often used to describe the movement and its
opponents—when put under scrutiny, the institutions and practices that
make up the Free Software movement fundamentally fail at their stated
goals. The Free Software movement is doing more harm to FOSS than good.</p>
<p>Not only is it an ideological mess, it hampers collaboration, it is
legally ineffective, it makes the lives of developers harder while doing
nothing actually useful for users, and it fundamentally gets in the way
of a thriving, free, and open software ecosystem.</p>
<h2 id="the-failure-of-the-free-software-ideology">The Failure of the Free Software Ideology</h2>
<p><a href="https://archive.md/ORsof">Why Software Should Be Free</a> by Richard
Stallman presents an argument against having owners of software and
explains the harm done by obstructing software development through
proprietary licensing. He posits that software with obstructions results
in fewer users, the inability for users to fix programs, and the
inability of developers to build upon prior knowledge or work. He also
states that the justifications one uses for keeping ownership of the
software (which he equates with keeping the software proprietary) are
emotional (i.e. &#8220;This software is mine, and I wish to control it&#8221;) and
economical (i.e. &#8220;I wish to become wealthy by programming.&#8221;). He shuns
these excuses and spends the rest of the document refuting those excuses
and explaining why the existence of proprietary software is bad and why
the alternative—software not having owners—is better. By and large,
I agree with this essay.</p>
<p>However, in nearly every Free Software project which exists today, there
is a clear &#8220;owner&#8221; of the software—someone who is the copyright holder,
benevolent dictator for life, or simply <em>de facto</em> leader of the project
and through whom all contributions must flow. Whether we&#8217;re talking
about large projects that are too large to fork and maintain by anybody
but large, well-funded groups such as the Linux kernel (in which Linus
still has complete veto power by the way), Qt (in which the company
controls the development of the software and simply allows older
versions to be used under a free license), or Android (where Google
maintains pretty solid control), or smaller projects which have simple
leaders. As long as there is a copyright statement, there are one or
more owners to be aware of.</p>
<p>Additionally, the <a href="https://archive.md/V14pR">GNU Manifesto</a>, aside from
calling the Open Source movement an &#8220;amoral approach&#8221;, goes on to say
that GNU &#8220;is not in the public domain&#8221; and will have restrictions placed
on further modifications (in the form of disallowing proprietary
modifications), with the justification given by Stallman being: &#8220;I want
to make sure that all versions of GNU remain free.&#8221; With that, Stallman
falls upon the same behaviour that he previously shunned in <em>Why
Software Should Be Free</em>. He uses his emotional attachment to the
software, something he said was an excuse to defend why software has an
owner, to justify his want to control how others can distribute and
modify his code. He is effectively saying &#8220;this is <em>my</em> creation, and
I wish to control what others can do with it&#8221; while also clearly
assigning an owner to the software.</p>
<p><em>Update 2021-12-13</em>: I was recently made aware of an article in which
Richard Stallman advocates against positive changes to copyright laws
because of how it would hurt Free Software. Instead of making software
free of copyright after 5 years, he advocates for maintaining copyright
control because it would hurt the control that Free Software licenses
would have over the distribution of software later on. It&#8217;s not enough
that the software would still fulfill the four pillars of free software
after the 5 years is up, control <em>must</em> be maintained over how other
people can distribute and use the software in their products in case
they ever decide to fork it and make something proprietary from it. Not
only does he not trust that people would use only the Free version (as
if we need to be protected by Free Software licenses lest we use some
proprietary software), he is, in essence, advocating for maintaining
ownership over software even though the change to copyright legislation
would be positive for society overall. The article is called: <a
href="https://www.gnu.org/philosophy/pirate-party">How the Swedish
Pirate Party Platform Backfires on Free Software</a>.</p>
<p>If software is not in the public domain, then, by definition, it has to
have at least one other owner. If Stallman can dictate how others can
use his software—even if it is more free than most proprietary
software—then it clearly has an owner.</p>
<p>Simply put, Stallman and others in the Free Software community use the
exact same excuses that he criticized in <em>Why Software Should Be Free</em>
as justification for their actions. GNU, the GPL, and seemingly the
entirety of Free Software as it stands today are all based on the same
premises as proprietary software. They use existing copyright systems in
what they deem the &#8220;right&#8221; way while simultaneously criticizing the way
others use them as wrong.</p>
<p>The Free Software movement comes off as both a &#8220;cult of
personality"—<a href="https://ploum.net/2023-06-19-more-rms.html">worshipping Richard Stallman and his
teachings</a> while ignoring
the inconsistencies between his words and his actions—as well as a &#8220;cult
of ideology"—shunning those who disagree with the manifestos and the
&#8220;way of life&#8221; that the movement espouses to an extreme degree. As long
as you, as a developer, do everything within the framework of the GPL
and the culture of Free Software, you are considered ethical and good.
As soon as you wish to do something outside of this domain—even by using
a more open, permissive license—you are considered amoral.</p>
<p>In an article where <a href="https://web.archive.org/web/20211108043329/https://www.linux.com/news/why-torvalds-sitting-out-gplv3-process/">Linus Torvalds criticizes the
GPLv3</a>,
Torvalds even says:</p>
<blockquote>
<p>&#8220;I think the GPLv3 is expressly designed to not allow [the meeting between
open source and free software people]. Exactly because the FSF considers us
open source people &#8216;heretics.&#8217;&#8221;</p>
</blockquote>
<h2 id="the-failure-of-the-gpl">The Failure of the GPL</h2>
<p>One of the stated goals written in the GNU Manifesto is:</p>
<blockquote>
<p>&#8220;Finally, the overhead of considering who owns the system software and what
one is or is not entitled to do with it will be lifted.&#8221;</p>
</blockquote>
<p>One look at the GPL or any other Free Software license will tell you
that they have utterly failed at this. For example, the GPL has become
so complicated that only a programmer with relatively advanced legal
knowledge and ability to read <em>and properly understand</em> &#8220;legalese&#8221; will
be able to decipher it to know what they are able and unable to do with
it. There exist websites which explain the license in plain English, but
even those say their explanations are no substitute for reading the
license. There are very specific meanings that many of the words in the
license take on when put in the context of our modern legal system so,
while you may be able to read the GPL and <em>think</em> that you understand
it, unless you are well-educated in &#8220;legalese&#8221;, you probably don&#8217;t fully
understand the true meaning and effect that the words of the license
would <em>actually</em> have in court.</p>
<p>The ramifications of the GPL are still not even fully understood by lawyers
themselves. Many large companies will shy away from the GPL simply because they
don&#8217;t want to take the risk of using GPL-licensed code improperly and being
forced to reveal their proprietary software. While I don&#8217;t agree with
proprietary software as a concept, the fact that even lawyers—who are supposed
to be expertly trained in the kind of language used in the license—are uneasy
about its terms further reinforces just how unapproachable it is to the everyday
software developer. GNU and the GPL have done nothing to remove the overhead of
considering who owns software and how it can be used.</p>
<p><em>Update 2023-07-13</em>: It has become especially clear how <a href="https://www.jeffgeerling.com/blog/2023/clearing-fud-surrounding-red-hats-actions">few people
actually
understand</a>
what the GPL does and does not permit based on the responses to changes
that Red Hat made to how they offer their source code (more on this later).</p>
<p>Since the development of the GPL is reactionary—that is to say, its
development and growth over time was in response to discovered
workarounds—there is now even more overhead by way of the extra
complication of the &#8220;-or-later&#47;only&#8221; clauses. So this is now a license
that has multiple versions which are <strong>not</strong> backwards compatible.
A project licensed under the GPLv2-only cannot integrate GPLv3-or-later
code without being re-licensed as GPLv3. The Linux kernel is an
excellent example of this.</p>
<p>Linus Torvalds even <a href="https://web.archive.org/web/20211108043329/https://www.linux.com/news/why-torvalds-sitting-out-gplv3-process/">came out strongly against the
GPLv3</a>
and the process by which the FSF created the license. Many others in the
industry also saw this as an extreme and unnecessary move by the FSF to
wield the ultimate power over the GPLv3; all because a manufacturer put
Linux in their products and blocked users from running their own
modified software on that hardware. The absurdity of this line of
thinking is compounded by the fact that this had absolutely nothing to
do with the Linux kernel since it&#8217;s the system&#8217;s firmware that would
stop users from running different software. This seems to many as just
an excuse to expand the scope and powers of the GPL over something
completely out of the scope of the GPL-licensed software. The move by
the FSF, the actions of Stallman, and the &#8220;tivoization&#8221; rhetoric are
even <a href="https://web.archive.org/web/20211020102058/https://sfconservancy.org/blog/2021/jul/23/tivoization-and-the-gpl-right-to-install/">heavily criticized by Software Freedom Conservancy member Bradley
M.
Kuhn</a>.</p>
<p>Putting aside the political manoeuvrings of the FSF, the mere existence
of an &#8220;-or-later&#8221; clause is a ridiculous thing to attach to a license.
Anybody who licenses their project under a GPLv3-or-later license puts
a lot of trust in the stewards of the GPL that the next version of the
GPL will align with their values and goals; a GPLv3-or-later project
will be able to be licensed under a GPLv4 license whatever the clauses
of that GPLv4 license. This is a lot of stock to put into a group of
people like the FSF who were so dogmatic and exclusionary in their
development of the GPLv3.</p>
<p>The reality of the GPL is that there is still a lot of overhead in
considering who owns the software and how it can be used. Not only in
whether or not a developer should choose version 2 or version 3 of the
license depending on their goals, but also for developers and users
alike who try to understand the language of the license to determine
what they can do with the software and, if they are integrating some
GPL-licensed code into their own product, who actually owns and has
copyright over that software.</p>
<p>Those who wish to integrate GPL-licensed code into their otherwise
non-GPL-licensed projects are faced with the decision to relicense their
code under the GPL, remake the functionality of the library under a more
open license, or otherwise abandon those efforts altogether. While the
GPL may &#8220;prevent&#8221; corporations or people from taking GPL-licensed code
and integrating it into a proprietary product, it also prevents
literally any other non-GPL-licensed project from using GPL-licensed
code, even other FOSS projects.</p>
<blockquote>
<p>GPL fans said the great problem we would face is that companies would
take our BSD code, modify it, and not give back.  Nope &#8211; the great
problem we face is that people would wrap the GPL around our code, and
lock us out in the same way that these supposed companies would lock us
out.  Just like the Linux community, we have many companies giving us
code back, all the time.  But once the code is GPL&#8217;d, we cannot get it
back.</p>
<p>&#8211; Theo DeRaadt, <a href="https://lkml.org/lkml/2007/9/1/102">Message to the Linux Kernel Mailing List</a></p>
</blockquote>
<p>Even so, it&#8217;s not like the GPL actually prevents corporations from
stealing GPL-licensed code and integrating it into projects. While there
are plenty of corporations who freely comply with the GPL, there are
plenty more, such as VMWare, who don&#8217;t comply and yet <a href="https://web.archive.org/web/20211027160559/https://sfconservancy.org/news/2019/apr/02/vmware-no-appeal/">don&#8217;t face
consequences</a>.
Even if a lawsuit is successful, it is usually at the cost of <a href="https://archive.is/lspvL">members
of the FOSS community who burn out</a> or are
left disenchanted by the whole process. Being GPL-licensed also doesn&#8217;t
prevent a project from being bought and therefore having all control
handed over to a corporation. This was most recently seen in the
<a href="https://hackaday.com/2021/05/17/telemetry-debate-rocks-audacity-community-in-open-source-dustup/">acquisition of Audacity by Muse
Group</a>
in which Muse Group bought the rights to the Audacity code and project.
Users have since forked the project<sup id="fnref1"><a href="#fn1" rel="footnote">1</a></sup>, but this doesn&#8217;t necessarily stop
something like this from happening in the future, and certainly doesn&#8217;t
stop it from happening to other projects. If software actually didn&#8217;t
have owners, this could not happen.</p>
<p><em>Update 2022-10-23</em>: It <a href="https://blog.gitea.io/2022/10/open-source-sustainment-and-the-future-of-gitea/">just happened to
Gitea</a>!</p>
<p><em>Update 2023-07-16</em>: Being under the GPL also doesn&#8217;t even stop projects
from being closed-source except to paying customers. As just <a href="https://arstechnica.com/information-technology/2023/06/red-hats-new-source-code-policy-and-the-intense-pushback-explained/">happened
with Red Hat Enterprise
Linux</a>!
Red Hat is making Red Hat Enterprise Linux&#8217;s source code available only
to paying customers. Since there&#8217;s no other way to get a copy from Red
Hat (you can&#8217;t just download it like you can Ubuntu), this is entirely
within the letter of the GPLv2. They&#8217;ve also said they&#8217;ll terminate
support contracts and not give customers new versions of the code if
those customers exercise their rights under the GPL by distributing the
code they receive from Red Hat. This angered a huge portion of the FOSS
community who shouted from the rooftops about how this violates the
&#8220;spirit&#8221; of Free Software. However, this is nothing new, and <a href="https://lwn.net/Articles/178550/">a company
was doing the same thing in 2006</a> to
which the Free Software Foundation said &#8220;that&#8217;s ok!&#8221;. That &#8220;spirit&#8221;
clearly doesn&#8217;t matter when it comes to a company&#8217;s bottom line and
neither the GPL nor the FSF do anything to address this.</p>
<p>The GPL-family of licenses attempt to solve a societal problem by
restricting the distribution of software in a manner not unlike the
so-called <a href="https://en.wikipedia.org/wiki/Organization_for_Ethical_Source">Ethical
Software</a>
movement. The GPL acts effectively as a proprietary license that allows
you to do the things it deems ethical, so long as you abide by the terms
of the license with regards to the distribution and re-licensing
restrictions. As long as you are in this &#8220;club&#8221;, everything is fine and
dandy and you can make your changes and push them to your favourite
projects. As soon as you leave this club and want to pull code from
a GPL-licensed project into your MIT-licensed project, well, sorry, too
bad for you.</p>
<p>While the GPL may not cause as much of an obstruction or be as unethical
as proprietary software, it is frankly not that much better. It causes
distress and conflict in the software community, is difficult for
non-lawyers to fully understand, and harms developers of
non-GPL-licensed FOSS software all while not even being effective at
what it was ostensibly designed to do. It is, for example, the reason
why the BSDs cannot take improvements made in the Linux kernel and
directly integrate them into their own kernels and <a href="https://web.archive.org/web/20211026123333/https://itsfoss.com/linus-torvalds-zfs/">it is the reason why
ZFS cannot be integrated into the Linux
kernel</a>,
but can be shipped with FreeBSD.</p>
<p>For all this talk of Free Software being the ethical option and the GPL
being the ultimate defender of user and developer rights, it completely
goes against the ethical principles laid out in <em>Why Software Should Be
Free</em>. So much for &#8220;free as in freedom&#8221;.</p>
<h2 id="the-failure-of-the-free-software-culture">The Failure of the Free Software Culture</h2>
<p>The GNU Manifesto speaks a lot about how:</p>
<blockquote>
<p>&#8220;Users will no longer be at the mercy of one programmer or company which owns
the sources and is in sole position to make changes.&#8221;</p>
</blockquote>
<p>But a cursory look at the current landscape of Free Software will tell
you that this is simply not the case <em>at all</em>.</p>
<p>Users are absolutely at the mercy of the maintainers of software
projects to integrate their changes in the current landscape of software
development, especially with software projects as complicated as many of
the popular GUI toolkits, kernels, or desktop environments. In fact, the
reality is that Free Software project issue boards and forums are not
much better than corporate support forums. Often when one opens an issue
in a large software project it can take months or even years for those
issues to be worked out. It&#8217;s also not uncommon for those issues to
simply go unsolved for many years. A great example of this is the <a href="https://web.archive.org/web/20210111165221/https://bugzilla.gnome.org/show_bug.cgi?id=141154&amp;">&#8216;Add
an &#8220;icon view with thumbnails&#8221; mode&#8217; GNOME
issue</a>
which was opened in 2004 (it&#8217;s almost old enough to vote!) and <del>is
still not actually fixed despite many users expressing how useful it
would be to have this feature</del><ins>apparently has been recently
added nearly 20 years later. Good job everyone!</ins></p>
<p>Users simply cannot maintain such complex software on their own and, if
they have limited programming ability, cannot be expected to fork
a project, make their fix, test their fix, act on feedback from the
maintainers (if they&#8217;re lucky enough to get their patch or pull request
noticed), and so on. The current software development ecosystem makes
this impossible, regardless of the license of the project. Software is
not yet simple enough for that and GNU and Free Software did nothing to
solve this. In fact, it can be argued that they made this worse by
contributing to the creation of a culture of &#8220;elitists&#8221; who expect all
the users of their software to have the ability to read code and very
technical discussions or documentation in order to understand and fix
problems.</p>
<p>If an experienced user does come along and is dis-satisfied with their
corporate support forum-like experience, they might be inclined to fork
the project. However another very common sight in the FOSS realm is to
see accusations towards groups or companies who fork projects of making
&#8220;hostile forks&#8221; or committing &#8220;theft&#8221; of Free Software. For example,
Members of the Free Software community <a href="https://web.archive.org/web/20211021085708/https://news.ycombinator.com/item?id=17007834">shunned and criticized the group
of developers who forked Gogs to make
Gitea</a>
when they forked a Free Software project to extend it for their own
needs because of an unresponsive maintainer. They even still kept the
project under the <em>same</em> license (an &#8220;unethical&#8221; Open Source license, no
less).</p>
<p><em>Update 2022-09-13</em>: I recently learned of the XFree86 fiasco in which
another, similar incident occurred where one of the original developers
of the X window system felt that the current state of things was
untenable and that the project needed to be forked and replaced. He was
<a href="https://web.archive.org/web/20120204152124/http://xfree86.org/pipermail/forum/2003-March/000128.html">summarily shunned and kicked from the
project</a>
for his actions. This is yet another example of how forking is viewed by
many who work in FOSS and who wish to maintain control over their
particular piece of software.</p>
<p>If software is not supposed to have an owner, as <em>Why Software Should Be
Free</em> advocates, what exactly is being stolen? Why do they, as the
creator of some piece of software, care if some company or even another
FOSS developer takes it and uses it in their product or makes
proprietary modifications with it?<sup id="fnref2"><a href="#fn2" rel="footnote">2</a></sup> <em>Why Software Should
Be Free</em> specifically outs this need to control what happens with one&#8217;s
software as one of the main justifications for proprietary licensing and
something to be avoided, yet it is seen everywhere in the Free Software
culture. In fact, an article entitled <em><a href="https://web.archive.org/web/20201112014255/https://www.techrepublic.com/blog/linux-and-open-source/dont-fear-the-fork-how-dvcs-aids-open-source-development/">Don&#8217;t fear the fork: How DVCS
aids open source
development</a></em>
perfectly exemplifies how the Free Software culture views forks (of
course, it&#8217;s written from the perspective of the &#8220;amoral&#8221; Open Source
movement).</p>
<p>The goal of Free Software as laid out by <em>Why Software Should Be Free</em>
was to create a world in which there were no owners of software and in
which distribution was not restricted. Yet, despite this, the way the
GPL family of licenses puts restrictions on the distribution of
GPL-licensed software combined with the culture of Free Software
actively <em>encourage</em> both of those things and actively <em>discourage</em>
forking software and modifying it to suit your own needs. From the point
of view of <em>Why Software Should Be Free</em>, the GPL combined with this
culture is, in reality, hardly much better than the world of proprietary
software we had before as far as users (and developers to a lesser
extent) are concerned.</p>
<p>The degree of openness which exists in the current software landscape
can be, to a large degree, attributed instead to the Open Source
movement<sup id="fnref3"><a href="#fn3" rel="footnote">3</a></sup>. It happened in spite of the Free Software movement, not
because of it.</p>
<h2 id="the-failure-of-free-software-to-remain-relevant">The Failure of Free Software to Remain Relevant</h2>
<p>Free Software and the surrounding culture and institutions are often
viewed as a farce outside of the dedicated Free Software <del>cult</del>
community. The FSF has been slowly descending into irrelevancy for the
past two decades as they struggle to do anything meaningful with their
time and resources; instead opting to make a lot of unproductive noise.
Take, as recent examples, how they <a href="https://web.archive.org/web/20210605120216/https://www.fsf.org/blogs/community/why-freeing-windows-7-opens-doors">mailed a hard drive to Microsoft
telling them to put the Windows 7 source code on
it</a>,
or how they <a href="https://web.archive.org/web/20211011152025/https://www.fsf.org/campaigns/apple">accuse Apple of &#8220;censoring free
software&#8221;</a>
—despite the fact that Apple isn&#8217;t actually censoring anything and
plenty of Free Software projects such as
<a href="https://telegram.org/apps#source-code">Telegram</a> are <a href="https://apps.apple.com/us/app/telegram-messenger/id686449807">on the App
Store</a>—and
also criticizing them for not supporting their specific chosen free
media codecs—once again, ignoring the plenty of other free media codecs
which are otherwise perfectly supported.</p>
<p>To expand on that last point about Free Software projects on the App
Store, the <a href="https://web.archive.org/web/20211102184229/https://www.apple.com/legal/internet-services/itunes/dev/stdeula/">Apple App Store
EULA</a>
contains restrictions that the GPL doesn&#8217;t allow (see section 10 of the
GPLv3 and section 6 of the GPLv2). It says:</p>
<blockquote>
<p>Except as provided in the Usage Rules, you may not distribute or make the
Licensed Application available over a network where it could be used by
multiple devices at the same time. You may not transfer, redistribute or
sublicense the Licensed Application [&#8230;] You may not copy (except as
permitted by this license and the Usage Rules), reverse-engineer, disassemble,
attempt to derive the source code of, modify, or create derivative works of
the Licensed Application, any updates, or any part thereof&#8230;</p>
</blockquote>
<p>Note that this only applies to the application you purchased in the App
store, as bundled by the App Store. It doesn&#8217;t prevent you from going to
GitHub and modifying the software there, it only prevents you from
legally modifying the software you got from the Apple App Store. Sure,
this isn&#8217;t a good thing and it can be easily argued that this is
unethical because you don&#8217;t ever own the apps you purchase, yet it is
hardly &#8220;censoring free software&#8221; given that, as the owner of a Free
Software project, you can freely submit GPL-licensed software to the App
Store and Apple assumes you have the rights to provide them with
a non-GPL-licensed build.</p>
<p>If you don&#8217;t have that ability because you don&#8217;t own exclusive rights to
the software and it&#8217;s not feasible for you to get the permission of
every contributor with their name attached to the project, well, that&#8217;s
not Apple&#8217;s problem. The FSF words their article like Apple is attacking
them when, in reality, Apple doesn&#8217;t care what license you&#8217;ve chosen,
only that you grant them the ability to distribute your app under the
terms of their EULA. The wording in that blog post is yet another
example of why the FSF are seen as a farce. They should know better.</p>
<p>This reputation of preferring ideological book-thumping over meaningful
action is nothing new. Most who are familiar with Linux are likely
familiar with Richard Stallman&#8217;s <a href="https://web.archive.org/web/20211102101640/https://www.gnu.org/gnu/linux-and-gnu.html">&#8220;GNU+Linux&#8221;
rant</a>
in which he squabbles and nitpicks over the relevancy of GNU to the
Linux name. Ignoring that the only significant contributions to the
Linux system GNU can claim is the compiler, the coreutils, and the
C library. While these used to be relatively significant in the early
90s, most Linux systems today run far more non-GNU software than GNU
software.</p>
<p>In fact, even those GNU components are quickly fading into irrelevancy
as projects like Clang&#47;LLVM, rewrites of coreutils to be faster and
cleaner (e.g. Busybox or various Rust projects), and other libc&#8217;s such
as muslc are gaining more and more traction with each passing day. GNU
is simply failing to make any meaningful and actual progress, and is
grasping at straws in an attempt to remain relevant. Not only have other
projects such as OpenBSD long since abandoned things like modern GCC due
to later versions becoming unmaintainable, buggy behemoths, GNU
themselves haven&#8217;t even released their HURD kernel in any meaningful
capacity despite promising to create such a thing since <em>before Linux
existed</em>.</p>
<p>Speaking of fading into irrelevancy, many of the Free Software
institutions such as the Software Freedom Conservancy and Free Software
Foundation Europe have either been reliant on GPL violation lawsuits as
one of their primary means to exist, or have been relatively ineffective
at carrying out their mandates with regards to litigation. It has gotten
so bad that <a href="https://lwn.net/Articles/873415/">the SFC have tried to bring lawsuits on behalf of the users
of GPL software</a>; something which has
little basis in actual copyright law, but is the only option they have
left when companies either skillfully hide their GPL violations or the
owners of GPL software are unwilling to enforce the license against
large opponents. A cursory glance on the SFC&#8217;s website reveals a lot of
information about this Vizio lawsuit, but not much information about
previous lawsuits or successes. No wonder these institutions also tend
to only go after small opponents. Even very public <a href="https://web.archive.org/web/20211108073317/https://github.com/OnePlusOSS/android_kernel_oneplus_sm8150/issues/13">violations such as
those committed by
OnePlus</a>
have still gone unanswered for. If such violations are clearly allowed
to continue with such ineffective enforcement, what even is the use of
the GPL in reality?</p>
<p>Regarding the quality of GNU software, outside of the Free Software
community, GNU code has a reputation for being resource-hungry, buggy,
bloated, or annoying and frustrating to work with, as many who have had
the pleasure of using alternative libc&#8217;s, compilers, utilities, or
programs will attest. GNU creations have a reputation for being
needlessly complex—solving problems which don&#8217;t really exist in the
first place if you write good software (or documentation)—and having
bafflingly complex source code. The GNU Info system and the code found
in many of the coreutils are good examples of this.</p>
<p>Finally, we can talk about how the conduct of Richard Stallman himself
reflects on the whole Free Software movement. The Free Software movement
went through its own little &#8220;constitutional crisis&#8221; over the question of
whether or not to keep him on as the face of Free Software after he made
some comments on an MIT mailing list about a sensitive topic. I won&#8217;t go
into specifics about that situation here, since it has been covered to
death in other media outlets and can be easily searched for (search
&#8220;stallman mit mailing list&#8221;), but, suffice to say, Stallman acted in
a completely improper and inept manner and, in fact, that is far from
the only example of him behaving in such a way.</p>
<p>In 2007, Stallman sent <a href="https://marc.info/?l=openbsd-misc&amp;m=119730630513821&amp;w=2">a message to the OpenBSD-misc mailing
list</a> entitled
<em>&#8220;Real men don&#8217;t attack straw men&#8221;</em> in which he accuses the OpenBSD folk
of making straw-man arguments about himself, and then using those
arguments to attack his credibility. If you read through this mailing
list thread, you don&#8217;t have to go far to realize that Stallman has
absolutely no clue what he&#8217;s talking about. He bases his opinion of
OpenBSD on &#8220;what I have heard&#8221; and presumes that the OpenBSD folk care
whether or not he recommends their system. He proceeds to have
everything he said get taken apart by the replies which point out all
the inconsistencies in his own arguments and stances.</p>
<p>After seeing just how ineffective this culture is at advocating for and
enforcing its principles in a meaningful way, as well as seeing the conduct
of one of its top-most members (not to mention <a href="https://fireborn.mataroa.blog/blog/you-dont-own-the-word-freedom-a-full-burn-response-to-the-gnulinux-comment-that-tried-to-gatekeep-me-off-my-own-machine/">the conduct from its
supporters</a>),
how could anyone view this as a movement to be appreciated, let alone joined
and celebrated?</p>
<h2 id="where-do-we-go-from-here">Where Do We Go From Here?</h2>
<p>I think, by now, it is accurate to say that Free Software is an abject
failure.</p>
<p>It has failed at its stated goals through both the licenses and the
culture it has created and has instead perpetuated the paradigm of
software ownership and the use of unethical and flawed copyright
legislation. It has done very little to prevent corporate takeover of
projects, improve the software development landscape, or make the lives
of developers or users easier. It has done nothing that more ethical,
permissive software licenses and the culture of collaboration born out
of projects such as BSD Unix didn&#8217;t already do, except to create a toxic
subculture of Free Software cult worshippers.</p>
<p>One cannot solve the copyright, ownership, or restricted distribution
problems of software through playing into the exact same flawed systems
that allow such problems to exist in the first place. These are problems
which must be solved on a societal level, not on the level of individual
software projects through an obtuse licensing. Free Software, as it stands
today, has the very real effect of restricting innovation, sharing, and
collaboration between developers.</p>
<p>None of this is to say that proprietary licenses are okay or even that
the Open Source movement is the alternative. In fact, the Open Source
Initiative is not all that much better than the Free Software
Foundation, it just has a mostly different set of problems which are out
of scope for this essay.</p>
<p>For the most part, I agree with <em>Why Software Should Be Free</em>. Stallman
has perfectly valid and good ideas in that essay, yet he misses the mark
with their implementation. He&#8217;s right in that software should not have
owners and restricting software distribution is unethical; I ultimately
believe that nobody should get to control how their software is used,
studied, distributed, or hacked upon. Software should be as much in the
public domain as possible just like books, music, product schematics
and other such things should be.</p>
<p>The only licenses which <em>truly</em> meet all these criteria under that
framework are public domain-equivalent licenses. Licensing your code
under <a href="https://unlicense.org/">the Unlicense</a>, the <a href="https://choosealicense.com/licenses/0bsd/">0BSD
License</a>, or the <a href="https://creativecommons.org/share-your-work/public-domain/cc0/">CC0
License</a>
means that you do not place <em>any</em> restrictions on the software
whatsoever. People don&#8217;t even have to mention your name or your project
when they use your code because you are no longer the owner of that
software.</p>
<p>If you do at least wish to have your name attached to the code, commonly
used permissive licenses are the best option. Licenses such as the <a href="https://choosealicense.com/licenses/mit/">MIT
License</a> or the <a href="https://choosealicense.com/licenses/isc/">ISC
License</a> (preferred due to it
being a simplified MIT) impose no further restrictions other than
maintaining a copyright and permission notice for that code if it&#8217;s used
in other projects. Essentially, people are free to do whatever they want
with your code, so long as they keep your name on parts that you wrote.</p>
<p>Not only do these options provide far more <em>real freedom</em><sup id="fnref4"><a href="#fn4" rel="footnote">4</a></sup> to
developers<sup id="fnref5"><a href="#fn5" rel="footnote">5</a></sup>, they remove the overhead of having to think about
who owns the software. In the case of software in the public domain, you
don&#8217;t have to worry at all because there is no owner. In the case of
permissively-licensed software, it&#8217;s a simple matter of copy-pasting the
necessary notice(s) wherever that code is used. These licenses are also
relatively easy to understand (except perhaps the CC0), and the culture
surrounding them is generally such that you don&#8217;t have to worry about
a mob coming after you for forking a project and morphing it into
something that serves your needs, nor do you have to worry about being
sued for an accidental violation of a license that even people who are
well-versed in software licensing aren&#8217;t confident about getting right.</p>
<p>You&#8217;ll notice that those licenses, however, do not address the issue of
corporations controlling software development and distribution, people
using software in ways you may deem bad or harmful, or the existence of
megasoftware. This is because those are problems that cannot be solved
or even effectively addressed by software licensing. These are societal
problems that must be tackled on a societal level. Attempting to do
otherwise simply harms and imposes more restrictions on small teams,
independent developers, and hobbyists who don&#8217;t have the resources to
ignore your restrictions or buy your development team.</p>
<p>In reality, by licensing your project under the GPL and participating in
Free Software culture, instead of limiting the harms that corporations
inflict, you end up limiting the good that the rest of us can do. Free
Software has failed.</p>
<div class="note">
<p>If this post intrigued you and made you want to
learn more, consider checking out:</p>
<ul>
<li><a href="https://shazow.net/posts/permissive-vs-copyleft/">Permissive vs Copyleft Open Source</a></li>
<li><a href="https://j3s.sh/thought/drones-run-linux-free-software-isnt-enough.html">drones run linux: the free software movement isn't enough</a></li>
<li><a href="https://www.boringcactus.com/2020/08/13/post-open-source.html">Post-Open Source</a></li>
<li><a href="https://idiomdrottning.org/foss-dystopia">FOSS Dystopia</a></li>
<li><a href="/texts/a-critique-of-free-software">A Critique of Free Software</a></li>
<li><a href="https://adrian.geek.nz/fossbros">On FOSSBros</a></li>
<li><a href="https://changelog.com/gotime/263">GoTime Podcast: Who owns our code? Part 2</a></li>
<li><a href="https://unixsheikh.com/articles/the-problems-with-the-gpl.html">The problems with the GPL</a></li>
</ul>

<p>You may also be interested in reading the <a
href="https://lobste.rs/s/dmh7qx/free_software_is_abject_failure">discussion
on Lobste.rs</a>.</p></div>
<div class="footnotes">
<hr/>
<ol>

<li id="fn1">
<p>It doesn&#8217;t seem to have gone anywhere or resulted in much, as is typical for these kinds of forks. While there is still commit activity in the repository, Tenacity isn&#8217;t even packaged for common Linux distributions like Debian or Fedora (as of August, 2024, more than three years after the takeover of Audacity), has little-to-no userbase, and very little mindshare. It turns out that when maintainers of a project have financial backing, that project tends to be the one to succeed, regardless of how unrighteous people may feel about it (which is why, for example, Forgejo, the fork of Gitea, seems to be doing quite well; it actually has financially-backed, dedicated developers).&#160;<a href="#fnref1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn2">
<p>I actually completely understand not wanting a company to use your work for evil but, as we&#8217;ve already seen, copyleft licenses don&#8217;t stop this from happening. It&#8217;s not a problem that can be solved or even meaningfully addressed by a software license (I talk more about this in the conclusion). Not to mention that I&#8217;ve rarely seen this angle brought up in Free Software circles; the conversation usually focuses on monetary compensation.&#160;<a href="#fnref2" rev="footnote">&#8617;</a></p>
</li>

<li id="fn3">
<p>I have many problems with the current culture of the Open Source movement and their corporate-friendly centrism, but that&#8217;s an essay for another day.&#160;<a href="#fnref3" rev="footnote">&#8617;</a></p>
</li>

<li id="fn4">
<p>Some might see this as a &#8220;shallow understanding of freedom&#8221; which is a sentiment that, frankly, I find patronising and condescending. It&#8217;s not a &#8220;shallow understanding&#8221; of freedom, it&#8217;s a different interpretation of what freedom for software should look like, and a disagreement with the notion that foisting onto other developers these rules and limitations regarding how their software should be used and distributed under the guise of (a cumbersome and ultimately ineffective) guarantee of freedom is good. By <em>real freedom</em> I mean a lack of authority in the anarchist sense, not the libertarian sense.&#160;<a href="#fnref4" rev="footnote">&#8617;</a></p>
</li>

<li id="fn5">
<p>Many people have responded to this with &#8220;but the Free Software movement is about freedom for users, not developers!&#8221;. The only thing I can say to that without writing another essay is please go back and read the parts of the essay where I explain how the Free Software movement does nothing meaningful for users. No software licensing scheme, open or not, can empower users to exercise the freedoms they deserve to be able to exercise; we have to fundamentally change the way we write software to realize this goal. (Although, it can certainly be said that having a license that most people can actually understand is a valuable step towards realizing that goal.)&#160;<a href="#fnref5" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
		]]></content>
	</entry>

	<entry>
		<title>A Git Workflow With Claws Mail</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/a-git-workflow-with-claws-mail/" />
		<id>http://www.paritybit.ca/blog/a-git-workflow-with-claws-mail/</id>
		<updated>2021-10-26T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="a-git-workflow-with-claws-mail">A Git Workflow With Claws Mail</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-10-26</p>
<p>When sending or receiving patches to or from git repositories, I prefer to use
<code>git send-email</code>. I find this workflow more efficient and less distracting than
jumping to a web interface to create a pull request. Plus, it&#8217;s not dependent on
having an account wherever a repository is hosted.</p>
<p>I used to use <a href="https://aerc-mail.org/">aerc</a> as my email client, but have since
switched to <a href="https://www.claws-mail.org/">Claws Mail</a> as I find TUIs with
multiple windows, tabs, and panes to be awkward to use. However, aerc came with
some really nice features for software development which aren&#8217;t available in
Claws Mail. Watch the video at the link for aerc above to see those features in
action.</p>
<p>Sending emails with <code>git send-email</code> is easy and switching to Claws Mail
required no changes to my workflow because it does not interact with an email
client at all. On the other hand, patches sent to me do end up in my email
client so I needed a way to quickly and easily apply the patches I receive.
Luckily, it&#8217;s fairly easy to do this with Claws Mail since it is quite
extensible.</p>
<p>First, I needed to write a small script to parse the email and extract the
repository name from the subject line so the patch can be applied to the
correct repository. Then, the script <code>cd</code>s into the repository and uses <code>git am</code>
to apply the patch. Here is the script:</p>
<pre><code>#!&#47;bin&#47;sh

projectsDir="$HOME&#47;Documents&#47;projects"
patchFile="&#47;tmp&#47;patch"

IFS=&#39;&#39;
while read -r line; do
    echo "$line" &#62;&#62; "$patchFile"
    if echo -n "$line" | grep -q "^Subject:"; then
        repo=$(echo "$line" | grep -o &#39;\[PATCH .*\]&#39; | cut -d&#39; &#39; -f2 | tr -d &#39;]&#39;)
    fi
done

echo "Applying patch to: $projectsDir&#47;$repo"
cd "$projectsDir"&#47;"$repo" &#38;&#38; git am "$patchFile"
rm "$patchFile"
</code></pre>
<p>There are two variables of note: <code>projectsDir</code> and <code>patchFile</code>. <code>patchFile</code> is
simply a temporary file where the script keeps the contents of the email.
<code>projectsDir</code> is the directory in which the script will look to find your
repositories. If you keep your repositories in a different location (e.g.
<code>$HOME&#47;Projects</code>) then you should edit this variable to point to that location.</p>
<p>Another important note is that the script looks for the repository using the
text that follows the word &#8220;PATCH&#8221; in the subject. When sending emails with <code>git
send-email</code>, you should specify the project name after the &#8220;PATCH&#8221; text so the
person to which you are emailing the patch knows at a glance which repository
your patch is for. If this is done correctly, a subject line will look something
like:</p>
<pre><code>Subject: [PATCH aerc] Fix whitespace in documentation
</code></pre>
<p>The script is licensed under the Unlicense, by the way.</p>
<p>After writing the script, I needed to add an Action in Claws Mail. This can be
done through the top menu by navigating to &#8220;Configuration &#62; Actions&#8230;&#8221; and
creating an action to run a shell command. Prefixing the shell command with the
pipe <code>|</code> symbol will tell Claws Mail to pipe the contents of the body of the
email on which the action is invoked to the command. This is what my action
looks like:</p>
<p><img src="claws-mail-actions.png" alt="A screenshot of the Actions
configuration menu with an action configured with the menu name 'Git
Apply Patch' and the Command '|git-apply-patch'."></p>
<p>I also bound this action to a <a href="https://www.claws-mail.org/faq/index.php/Interface#How_can_I_change_the_key-bindings_.28hot-keys.29_in_Claws_Mail.3F">custom keyboard
shortcut</a>
so I can press a key combination which will apply the patch. After running a
shell command, Claws Mail helpfully opens up a window displaying the output of
the command so I can see whether or not the command failed and what went wrong.</p>
<p>Here is an example of me applying a patch where you can first see a successfully
applied patch, followed by what it looks like when the patch fails to apply:</p>
<p><video src="claws-mail-git.webm" alt="A demonstration of applying a git
patch by invoking the action on a patch email in Claws Mail." controls>Your
browser does not support the video tag.</video></p>
<p>So there you have it: a clean and easy way to apply git patches using Claws
Mail. It&#8217;s even faster than using aerc too, since I only have to type a single
keyboard shortcut instead of typing out whole commands.</p>
		]]></content>
	</entry>

	<entry>
		<title>Mastodon Is Dead, Long Live Misskey 🍮</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/mastodon-is-dead-long-live-misskey/" />
		<id>http://www.paritybit.ca/blog/mastodon-is-dead-long-live-misskey/</id>
		<updated>2021-08-05T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="mastodon-is-dead-long-live-misskey-">Mastodon Is Dead, Long Live Misskey 🍮</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-08-05</p>
<div class="note"><p>This article is pretty old and the landscape of
Fedi has changed a bit. There is now a fork of Pleroma called <a
href="https://akkoma.dev/AkkomaGang/akkoma/">Akkoma</a> and forks of
Misskey called <a
href="https://akkoma.dev/FoundKeyGang/FoundKey">FoundKey</a> and <a
href="https://codeberg.org/thatonecalculator/calckey">CalcKey</a> which
all seek to solve various technical and social shortcomings with their
respective projects. The server I am on right now uses <a
href="https://github.com/hometown-fork/hometown">Hometown</a>, a fork of
Mastodon.</p></div>
<p>Okay, so, Mastodon isn&#8217;t <em>actually</em> dead, but some recent happenings and a
long-standing trend of the lead developer ignoring features beneficial to
smaller instances have led many to start looking at other options, be it forks
of Mastodon, or other software entirely. Recently, I and many others have taken
a look at <a href="https://github.com/misskey-dev/misskey">Misskey</a>, an alternative
Fediverse software that also uses ActivityPub and can communicate with both
Pleroma and Mastodon instances.</p>
<h2 id="whats-going-on-with-mastodon-and-pleroma">What&#8217;s Going On With Mastodon (and Pleroma)</h2>
<p>Recently, Eugen, the lead developer of Mastodon (also known as Gargron)
released an <a href="https://github.com/mastodon/mastodon-ios">official Mastodon iOS
app</a> which lacks basic features which
many users deem important, especially for smaller communities. As of the time
of writing, the app seems to intentionally be missing the ability to view the
Local timeline (the timeline consisting of posts only from users of the
instance you are on), and the Federated timeline (posts from all other
instances which have federated with the one you are on).
[<a href="https://github.com/mastodon/mastodon-ios/issues/221">Source</a>]</p>
<p>This, plus the tendency for Gargron to deny useful patches such as <a href="https://github.com/mastodon/mastodon/pull/8427">Local-only
posting</a> and <a href="https://github.com/mastodon/mastodon/pull/5697">configurable
character limits</a>, has led to
forks, such as <a href="https://glitch-soc.github.io/docs/">glitch-soc</a>, and the usage
of other software, such as <a href="https://pleroma.social/">Pleroma</a>.</p>
<p>For the time being, things seems to still be&#8230; okay. Mastodon is well-funded
and nothing has yet changed for the desktop site or the software as a whole,
but this could change at any moment depending on where Gargron wishes to take
his software. This isn&#8217;t <em>necessarily</em> a bad thing depending on his goals for
the software, but for those of us who want the Fediverse to be made up of a
bunch of smaller, more community-focused instances as opposed to a set of large
Twitter-like structures, the future doesn&#8217;t look hopeful.</p>
<p>Furthermore, Pleroma&#8217;s development funding has recently been cut, stagnating
development and disappointing many users who were looking forward to exciting
new features such as groups. There are&#8230; other issues with Pleroma, but I will
not talk about them here.</p>
<h2 id="okay-so-what-even-is-misskey">Okay, So What Even Is Misskey?</h2>
<p>To summarize, Misskey is another bit of Fediverse software, similar to Mastodon
and Pleroma, but with far more features, and a far nicer and more
polished-feeling UI. It is currently developed by one person,
<a href="https://github.com/syuilo">syuilo</a> and is supported by a small amount of
corporate funding, combined with some <a href="https://www.patreon.com/syuilo">Patreon</a>
contributions.</p>
<p>At a glance, here are some of the features it has:</p>
<ul>
<li>Clips - basically public bookmarks</li>
<li>Drive - view all media you&#8217;ve uploaded to the server, re-use images without
having to re-upload them, and more</li>
<li>Multiple UI modes built in to the front-end</li>
<li>Federated chat</li>
<li>MFM - Misskey-Flavoured Markdown, taking post markup to a whole new level</li>
<li>Excellent admin panel features</li>
<li>Custom timelines, channels, and groups</li>
<li>Excellent UI customization</li>
</ul>
<p>You may have heard of some trouble with Syuilo facing burnout and funding being
cut. This is not untrue, but since Syuilo announced this, they have received
some more funding, and have re-structured the way they develop the project. The
project is far from dead, and with the recent boost in popularity, it could see
development pick up again—hopefully in a healthier way this time.</p>
<h2 id="how-is-it-from-an-admin-perspective">How Is It From an Admin Perspective?</h2>
<p>Having administrated Mastodon, Pleroma, and now Misskey for single-user
instances, I can confidently say that Mastodon is the heaviest and Pleroma and
Misskey are much lighter. Misskey is heavier than Pleroma, but not by terribly
much; both are far lighter than Mastodon. There are also murmurings
that Misskey scales better than Pleroma (which already scaled far better than
Mastodon), though more insight is probably needed from the admins experienced
with Pleroma.</p>
<h3 id="resource-usage">Resource Usage</h3>
<p>As far as my own servers: at this moment, the Pleroma server (Debian Buster) is
using 685MB of RAM with a load average of <code>0.01 0.04 0.07</code> whereas the Misskey
server (Debian Bullseye) is using 848MB of RAM with a load average of <code>0.35 0.18
0.15</code>. Both are running on Vultr VPS instances.</p>
<p>Misskey tends to have more big bursts of CPU usage, so, in my experience, it is
helpful to have more than one CPU core for your Misskey server. You also need
to configure swap or have a minimum of 2GB of RAM to compile Misskey because it
is a Nodejs project. You can probably get away with a $10&#47;mo VPS from Vultr,
DigitalOcean, or Linode for servers with a handful of people, but you will
probably want to opt for the $20&#47;mo VPSes for between 15 and 50 people. For
example, @razzlom\@quietplace.xyz runs a Misskey instance with 50 users
(approximately 10 active users) without ElasticSearch and they report that this
uses 50-60% of 8GB of RAM and 1-10% of 4 AMD EPYC cores.</p>
<h3 id="admin-features">Admin Features</h3>
<p>From what I and others have seen so far, the admin features of Misskey are
amazing and the admin UI is much better than any other Fediverse software so
far.</p>
<p>For example, you can see the size of various database tables, the server logs,
the server resource usage, ALL media that has been uploaded to your server, and
more from within the UI. Take a look:</p>
<figure>
    <a href="admin-overview.png"><img loading="lazy" src="admin-overview.png"></a>
    <figcaption>The Admin Overview - Showing an overview of server resource usage and activity</figcaption>
</figure>
<figure>
    <a href="federation.png"><img loading="lazy" src="federation.png"></a>
    <figcaption>The Federation Panel - Showing stats about which servers might be down</figcaption>
</figure>
<figure>
    <a href="database.png"><img loading="lazy" src="database.png" alt="The Admin Overview"/></a>
    <figcaption>The Database Panel - Showing stats about various table sizes</figcaption>
</figure>
<p>Some other excellent features which are either missing from Mastodon, Pleroma,
or both are:</p>
<ul>
<li>server-wide announcements,</li>
<li>customizable post character limits (no more 1&#47;X Mastodon threads!!),</li>
<li>the ability to promote a post instance-wide,</li>
<li>the ability to present advertisements to your users (assuming they are willing to accept that) which can help with funding your instance,</li>
<li>the ability to easily monitor the job queue of the server,</li>
<li>and the search does actually work well enough even without having ElasticSearch installed, and without needing to enable Postgres RUM indices like in Pleroma.</li>
</ul>
<h2 id="how-is-it-from-a-user-perspective">How Is It From a User Perspective?</h2>
<p>In short, it&#8217;s unlike any other Fediverse software that currently exists. It is
packed full of useful features and, even though some stuff can definitely be
improved, it is exciting to see just what Fedi can be.</p>
<h3 id="timelines">Timelines</h3>
<p>With Misskey, you have the same sorts of timelines you expect from other
Fediverse software. The table below summarizes which posts each timeline
displays (note that &#8220;Home&#8221; post visibility is equivalent to &#8220;Unlisted&#8221; in other
Fediverse software):</p>
<table> <thead>
<tr>
    <th colspan="2">Source</th>
    <th colspan="4">Timeline</th>
</tr>
<tr>
    <th>User</th>
    <th>Post Visibility</th>
    <th>Home</th>
    <th>Local</th>
    <th>Social</th>
    <th>Global</th>
</tr>
</thead> <tbody>
<tr>
    <td rowspan="3">Local (Following)</td>
    <td>Public</td>
    <td>X</td>
    <td>X</td>
    <td>X</td>
    <td>X</td>
</tr>
<tr>
    <td>Home</td>
    <td>X</td>
    <td>&nbsp;</td>
    <td>X</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td>Followers-only</td>
    <td>X</td>
    <td>X</td>
    <td>X</td>
    <td>X</td>
</tr>
<tr>
    <td rowspan="3">Remote (Following)</td>
    <td>Public</td>
    <td>X</td>
    <td>&nbsp;</td>
    <td>X</td>
    <td>X</td>
</tr>
<tr>
    <td>Home</td>
    <td>X</td>
    <td>&nbsp;</td>
    <td>X</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td>Followers-only</td>
    <td>X</td>
    <td>&nbsp;</td>
    <td>X</td>
    <td>X</td>
</tr>
<tr>
    <td rowspan="3">Local (Not Following)</td>
    <td>Public</td>
    <td>&nbsp;</td>
    <td>X</td>
    <td>X</td>
    <td>X</td>
</tr>
<tr>
    <td>Home</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td>Followers-only</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td rowspan="3">Remote (Not Following)</td>
    <td>Public</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>X</td>
</tr>
<tr>
    <td>Home</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td>Followers-only</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
</tr>
</tbody> </table>
<p>This behaviour is, in practice, slightly different than Mastodon, and quite
different from Pleroma.</p>
<h3 id="health">Health</h3>
<p>Overall, Misskey seems to encourage more genuine social interaction compared to
other Fediverse software and traditional social media. For example, there are
no favourites on Misskey. You may see the &#8220;Favourite&#8221; option in the menu
underneath a post, but this is simply a bookmark function. It is truly saving a
post that you really like as opposed to behaving, in practice, as a
meaningless &#8220;Like&#8221; button or read-receipt.</p>
<p>Instead, Misskey features emoji reactions to posts as the main way (aside from
boosting) of interacting with posts. You can react to a post with a regular
Unicode emoji (which other Fediverse software that supports this can see) or
with custom emoji (which only Misskey users can see). This generally results in
much more thought put into how you wish to react to a post, with &#8220;Favourites&#8221;
from users of other software simply showing up as the thumbs up emoji.</p>
<p>Furthermore, the style of timeline that Misskey and Mastodon have tend to
encourage more healthy interaction and consumption than Pleroma&#8217;s. Even though
all social media is unhealthy to the degree that many of us use it, Pleroma&#8217;s
timeline encouraged doomscrolling and negative interaction in a way that
neither Mastodon&#8217;s nor Misskey&#8217;s do because it shows you absolutely everything
that people you follow post which tends to drag you into threads that you
really don&#8217;t involve you or need to involve you. I can personally attest to
this, since I have been hosting and using Pleroma for over a year now.</p>
<h3 id="groups-channels-pages-clips-galleries-and-antennasoh-my">Groups, Channels, Pages, Clips, Galleries, and Antennas—Oh My</h3>
<p>This Misskey&#8217;s bread and butter in my eyes and what makes it stand out so
strongly from the other ActivityPub-based software. There is a lot of fun to
have with these features, though not all of them are federated just yet.</p>
<p>Groups are (currently) local-only collections of users to which you can send
messages. Think of it like a group chat in applications like Telegram, Matrix,
or channels like in IRC.</p>
<p>Channels are local-only posting groups to which you can post notes to only the
specific people who are subscribed to that channel.</p>
<p>Pages are static pages on which you can put almost anything you want, including
writing AiScript (a Misskey-specific scripting language) to add functionality
to the page. Think of it a bit like GitHub Pages or something similar. You can
then link these pages, and others can view them on your instance. <a href="https://misskey.io/@robflop/pages/notePreviewEN">Here is an
example of a page</a>.</p>
<p>Clips are like bookmarks but they can be organized and made public. Think of
them a bit like Twitch or YouTube livestream clips, though text-focused
instead.</p>
<p>Galleries are collections of public photos that others can see when they look
at your gallery on your instance. The galleries themselves are not yet
federated, so you do have to go to the person&#8217;s instance to see their gallery,
but it provides an Instagram-like look at the media they&#8217;ve publicly uploaded
and chosen to make available.</p>
<p>Antennas are possibly one of the coolest features. They are effectively custom
timelines. You can make an antenna that just shows posts from specific users
and notifies you when they post something new, you can make an antenna that
collects posts containing or excluding certain key words, or you can make an
antenna that collects only posts with files attached. If you want to emulate
Pleroma&#8217;s timeline behaviour, you can even make an antenna consisting of &#8220;Notes
from following users&#8221; with &#8220;Show replies&#8221; checked.</p>
<h3 id="your-drive">Your Drive</h3>
<p>Your drive is possibly one of <em>the</em> single most useful features on Misskey. You
are allocated a (configurable by the server admins) amount of storage space you
can use for files uploaded to your drive and you can store whatever you&#8217;d like
in there. If you want to upload a bunch of memes to have them easily on hand
whenever you want to react to someone or if you want to simply re-share a file
you shared before without having to re-upload it to the server or dig through
your old posts, you can do that easily with the drive.</p>
<figure>
    <a href="drive.png"><img loading="lazy" src="drive.png"/></a>
    <figcaption>My Drive with an emoji folder and several other images.</figcaption>
</figure>
<h3 id="apps">Apps</h3>
<p>App support is a little limited at the moment. Since Misskey is not compatible
with the Mastodon API, one can&#8217;t use apps like Tusky or Tootle with it. There
are, however, a few apps available. Namely
<a href="https://apps.apple.com/jp/app/id1474451582">SocialHub</a> for iOS and
<a href="https://github.com/Kinoshita0623/MisskeyAndroidClient">Milktea</a> for Android.</p>
<p>One can also use Misskey in the browser, and it provides a reasonably snappy
experience, but will most likely use more data than a dedicated app.</p>
<h3 id="other-various-user-features">Other Various User Features</h3>
<p>Some other excellent user-facing features which are either missing from
Mastodon, Pleroma, or both are:</p>
<ul>
<li>an excellent threading model (similar to Reddit) where it&#8217;s much easier to follow the flow of a conversation,</li>
</ul>
<figure>
    <a href="threading.png"><img loading="lazy" src="threading.png" alt="A threaded conversation in Misskey."/></a>
</figure>
<ul>
<li>MFM (Misskey-Flavoured Markdown) which is like markdown on steroids and even supports LaTeX formatting,</li>
</ul>
<figure>
    <a href="mfm.png"><img loading="lazy" src="mfm.png" alt="A post with MFM showing off LaTeX."/></a>
</figure>
<ul>
<li>the ability to have custom CSS for your client, such as in the example below which makes it so that post parents are shown on hover only,</li>
</ul>
<pre><code>.tabs ~ * div[tabindex="-1"] {
    overflow: visible;
    contain: none;
}

.tabs ~ * div[tabindex="-1"] .reply-to {
    position: absolute;
    left: 2%;
    bottom: calc(100% - 1em);
    max-width: 85%;
    box-sizing: border-box;
    background: var(--panelHighlight);
    z-index: 1000;
    padding: 20px 24px;
    box-shadow: 0 .5em 2em rgba(0, 0, 0, .5);
    opacity: 0;
    visibility: hidden;
    transition: opacity .2s, visibility 0s ease .2s;
}

.tabs ~ * div[tabindex="-1"]:hover .reply-to {
    opacity: 1;
    visibility: visible;
    transition: opacity .2s ease .5s, visibility 0s ease .5s;
}
</code></pre>
<ul>
<li>working and federating pinned posts (which Pleroma lacks),</li>
<li>good handling of posts that have been deleted (no more accidentally posting a reply to a deleted post, or needing to refresh to have that post disappear from your timeline!),</li>
<li>automatically marking media as sensitive when you add a CW to your post (something every other bit of software except PleromaFE does, despite multiple requests to at least have the ability to do that),</li>
<li>the option to auto-approve follow requests from people you follow,</li>
<li>multiple different UI layouts built into the software,</li>
<li>a relatively performant UI (as long as animations and blur are disabled),</li>
<li>and an extremely customizable UI, with widgets!</li>
</ul>
<figure>
    <a href="widgets.png"><img loading="lazy" src="widgets.png" alt="My sidebar with some widgets."/></a>
</figure>
<h2 id="the-rough-parts">The Rough Parts</h2>
<h3 id="on-the-admin-side">On The Admin Side</h3>
<p>Of course, not everything is without its caveats. For those used to Pleroma&#8217;s
MRF system, Misskey doesn&#8217;t have anything like that. Admins can defederate from
a domain and can silence and suspend individual users, but there are no options
for a user to silence a whole instance themselves or for an admin to only strip
media from an instance, for example.</p>
<p>On one hand, this does limit what moderators can do for their instance, but, on
the other hand, if an instance really is causing enough trouble to bother your
users and their moderators aren&#8217;t responding, just blocking them is probably
what you&#8217;ll want in the end given that, more often than not, those kinds of
instances just keep causing more and more trouble. It also keeps your options
clear and simple.</p>
<p>One of the other downsides to administrating a Misskey instance at the moment
is the lack of bulk emoji import support. Although it&#8217;s trivially easy to add,
tag, and categorize emoji—even from remote instances—it is currently impossible
to import a large amount at once. What you will probably want to do instead is
go to your Drive, create some folders to organize your emoji, upload them all
from your PC into the folders (you can upload more than one at a time), and then
go to the Custom Emoji settings, choose import from Drive, and click on all of
the emoji you wish to import.</p>
<p>This isn&#8217;t such a big deal if you only have maybe a couple hundred emoji at the
most, but is more tedious than it could be. The same goes for categorizing and
tagging those emoji.</p>
<p><del>Finally, there is currently an issue where Misskey has trouble federating with
profiles that have bios which are too long.</del> <ins>This has been fixed.</ins></p>
<h3 id="on-the-user-side">On The User Side</h3>
<p>Currently, there are a few things which could be improved. For one, there is no
option to limit streaming of new posts when you are scrolled to the top of your
timeline. Unlike in Pleroma, where you can choose to have posts stream in as
long as you are scrolled up or click a button when you are ready to see new
posts, in Misskey this is not an option which can be frustrating as posts move
down as you were reading them.</p>
<p>Another minor issue is that Antennas don&#8217;t show your own posts, unlike the
other timelines. Although this isn&#8217;t a huge deal, many people like to see their
posts as part of the conversation so it&#8217;s a bit weird to type a response and
not see it appear in the custom timelines.</p>
<p>Also, mutes can be a little bit leaky. If you have a user muted, you can still
see conversations involving them since it seems to only check post authors and
doesn&#8217;t include mentions. A boost of a reply to a post of a user you have muted
can also make it through the filter.</p>
<p>Finally, there are a few minor other UI issues such as notification dots
getting stuck on (though you can hide them with custom CSS or mark all
notifications read in the settings), some modals not being dismissable with the
Esc shortcut key, and there is no option to play gifs or other media only when
you hover over them.</p>
<p>Overall, these issues haven&#8217;t bothered me much and I consider them pretty minor
compared to the benefits of Misskey, though your experience might differ.</p>
<h2 id="in-conclusion">In Conclusion</h2>
<p>Although there are things yet unfinished with Misskey (as there is for all the
other Fediverse software), it is already miles ahead of the rest of the
Fediverse software I&#8217;ve tried. Yes, there are some rough edges and there might
be UI elements or UX aspects that some don&#8217;t like or prefer, but at least for
me, and for many others who have tried it over the past couple days, Misskey
really seems like the future of the Fediverse; other software feels like it&#8217;s
stuck in an old paradigm, trying to copy too much what Twitter or 4chan are.</p>
<p>Plus, since the seemingly overnight switch of so many users (at least in my
circle) to Misskey, there has been a lot of work to figure out features,
document things more thoroughly, and provide things like the aforementioned
patch which fixes federation for people with long bios. Many of the issues I
have with Misskey are minor and can be readily fixed.</p>
<p>If you check out Misskey and like it, please consider <a href="https://www.patreon.com/syuilo">donating to
Syuilo</a> to keep development going. The future
is bright for Misskey.</p>
		]]></content>
	</entry>

	<entry>
		<title>Migrating from nginx to OpenBSD's httpd and relayd</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/migrating-from-nginx-to-openbsd-httpd-and-relayd/" />
		<id>http://www.paritybit.ca/blog/migrating-from-nginx-to-openbsd-httpd-and-relayd/</id>
		<updated>2021-02-17T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="migrating-from-nginx-to-openbsds-httpd-and-relayd">Migrating from nginx to OpenBSD&#8217;s httpd and relayd</h1>
<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-02-17</p>
<figure>
    <img src="openbsd-logo.png" alt="The OpenBSD logo."/></a>
    <figcaption>This logo is subject to the license at:
        <a href="https://www.openbsd.org/">openbsd.org</a>
    </figcaption>
</figure>
<div class="note"><p>The configuration specified in this blog post is
out of date. Please refer to <a
href="/garden/sysadmin/openbsd-server/">OpenBSD HTTP and Git Server</a>
for my updated configuration.</p></div>
<p>Having set up my mail server on OpenBSD, I&#8217;ve been very satisfied with the
cohesiveness of the operating system; it has been a breeze to administrate.
Since certbot just stopped working randomly on my previous server running Debian
10 and nginx, I took it as an opportunity to try out OpenBSD for hosting my
website and reverse proxy. OpenBSD includes two daemons written by the OpenBSD
developers—httpd and relayd—for just those purposes. They also provide
acme-client as an alternative to certbot. All of this was done on OpenBSD 6.8.</p>
<p>Below is my httpd configuration. This contains configurations for
renewing the TLS certificate as well as serving both
<a href="/">www.paritybit.ca</a> and ftp.paritybit.ca with redirects as needed. If
I wanted to, I could also split these into separate config files and use
the <code>include</code> directive.</p>
<pre><code>types {
    include "&#47;usr&#47;share&#47;misc&#47;mime.types"
}

# For certificate renewal
server "paritybit.ca" {
    listen on * port 80
    location "&#47;.well-known&#47;acme-challenge&#47;*" {
        root "&#47;acme"
        request strip 2
    }
    location * {
        block return 302 "https:&#47;&#47;paritybit.ca$REQUEST_URI"
    }
}
server "paritybit.ca" {
    listen on * port 8080
    location * {
        block return 302 "https:&#47;&#47;www.paritybit.ca$REQUEST_URI"
    }
}

# WWW.PARITYBIT.CA
server "www.paritybit.ca" {
    listen on * port 8080
    root "&#47;paritybit.ca"
    location "&#47;" {
        request rewrite "&#47;html&#47;home.html"
    }
    location match "&#47;.*%.html" {
        request rewrite "&#47;html&#47;$REQUEST_URI"
    }
    location match "&#47;([^%.]+)$" {
        request rewrite "&#47;html&#47;%1.html"
    }
}

server "www.paritybit.ca" {
    listen on * port 80
    location * {
        block return 302 "https:&#47;&#47;www.paritybit.ca$REQUEST_URI"
    }
}

# FTP.PARITYBIT.CA
server "ftp.paritybit.ca" {
    listen on * port 8080
    root "&#47;ftp.paritybit.ca"
    directory auto index
}

server "ftp.paritybit.ca" {
    listen on * port 80
    location * {
        block return 302 "https:&#47;&#47;ftp.paritybit.ca$REQUEST_URI"
    }
}
</code></pre>
<p>In the above configuration, there are two <code>location match</code> directives in the
<a href="https://www.paritybit.ca">www.paritybit.ca</a> server. The first matches any
request for a path ending in <code>.html</code> and rewrites the request to serve the
webpages from the <code>html</code> subdirectory as opposed to trying to find them in the
root folder of the website.</p>
<p>The second matches any request which doesn&#8217;t have a file extension and appends
<code>.html</code> to the requested resource path. This allows me to replicate nginx&#8217;s
<code>try_files</code> command where one can tell it to search for files which look like
<code>$DOCUMENT_URI.html</code> and it means that users don&#8217;t have to type out the <code>.html</code>
extension when visiting a page on my site.</p>
<p>Below is my relayd configuration. I run multiple services from one IP so I need
to reverse proxy incoming connections to various services on my network. As with
nginx&#8217;s reverse proxying, relayd can handle the TLS connections to each of my
services. I could also reverse proxy the connections to port 80 and redirect
them using relayd, but I felt it was simpler to just let the webserver handle
those directly.</p>
<p>The reverse proxy for Gemini at the bottom of the configuration is just for
accessing it within my network because of my internal DNS configuration.</p>
<pre><code>ext_addr = 10.0.0.20
table &#60;pleroma&#62; { 10.0.0.7 }
table &#60;git&#62; { 10.0.0.11 }
table &#60;matrix&#62; { 10.0.0.16 }
table &#60;www&#62; { 127.0.0.1 }
table &#60;gemini&#62; { 10.0.0.21 }

# TLS proxy all home services
http protocol "httpsproxy" {
    tcp {nodelay, sack, backlog 128}

    tls keypair "paritybit.ca"

    return error

    match header set "X-Client-IP" \
        value "$REMOTE_ADDR:$REMOTE_PORT"
    match header set "X-Forwarded-For" \
        value "$REMOTE_ADDR"
    match header set "X-Forwarded-By" \
        value "$SERVER_ADDR:$SERVER_PORT"

    match response header remove "Server"
    match response header set "X-Frame-Options" \
        value "SAMEORIGIN"
    match response header set "X-XSS-Protection" \
        value "1; mode=block"
    match response header set "X-Content-Type-Options" \
        value "nosniff"
    match response header set "Referrer-Policy" \
        value "strict-origin"
    match response header set "Content-Security-Policy" \
        value "default-src &#39;none&#39;; \
        base-uri &#39;self&#39;; \ form-action &#39;self&#39; https:&#47;&#47;duckduckgo.com&#47;; \
        img-src &#39;self&#39; data: https:; \
        media-src &#39;self&#39; https:; \
        style-src &#39;self&#39; &#39;unsafe-inline&#39;; \
        font-src &#39;self&#39;; \
        script-src &#39;self&#39; &#39;unsafe-inline&#39;; \
        connect-src &#39;self&#39; wss:&#47;&#47;pleroma.paritybit.ca; \
        upgrade-insecure-requests;"
    match response header set "Strict-Transport-Security" \
        value "max-age=31536000; includeSubDomains"
    match response header set "Permissions-Policy" \
        value "accelerometer=(none), camera=(none), \
        geolocation=(none), gyroscope=(none), \
        magnetometer=(none), microphone=(none), \
        payment=(none), usb=(none), \
        ambient-light-sensor=(none), autoplay=(none)"

    pass request quick header "Host" value "git.paritybit.ca" \
        forward to &#60;git&#62;
    pass request quick header "Host" value "matrix.paritybit.ca" \
        forward to &#60;matrix&#62;
    pass request quick header "Host" value "pleroma.paritybit.ca" \
        forward to &#60;pleroma&#62;
    pass request quick header "Host" value "ftp.paritybit.ca" \
        forward to &#60;www&#62;
    pass request quick header "Host" value "www.paritybit.ca" \
        forward to &#60;www&#62;
    pass request quick header "Host" value "paritybit.ca" \
        forward to &#60;www&#62;
    block
}

relay "reverseproxy" {
    listen on $ext_addr port 443 tls
    protocol httpsproxy
    forward to &#60;git&#62; port 80 check http "&#47;" code 200
    forward to &#60;matrix&#62; port 8008 check http "&#47;" code 302
    forward to &#60;pleroma&#62; port 8080 check http "&#47;" code 400
    forward to &#60;www&#62; port 8080 check http "&#47;" code 302
}

#For Matrix
http protocol "matrix" {
    tcp {nodelay, sack, backlog 128}

    tls keypair "paritybit.ca"

    return error

    match header set "X-Client-IP" \
        value "$REMOTE_ADDR:$REMOTE_PORT"
    match header set "X-Forwarded-For" \
        value "$REMOTE_ADDR"
    match header set "X-Forwarded-By" \
        value "$SERVER_ADDR:$SERVER_PORT"

    pass
}

relay "matrixrevprox" {
    listen on $ext_addr port 8448 tls
    protocol matrix
    forward to &#60;matrix&#62; port 8008 check tcp
}

relay gemini {
    listen on $ext_addr port 1965
    forward to &#60;gemini&#62; port 1965 check tcp
}
</code></pre>
<p>There is a lot of extra configuration for the HTTP services for setting things
like Content Security Policy and other security headers (what a mess the Web has
become&#8230;). I used the <a href="https://docs.pleroma.social/backend/installation/openbsd_en/">Pleroma installation guide for
OpenBSD</a> as a
reference for the CSPs needed for that service.</p>
<p>As usual, the tools provided by the OpenBSD developers are a breeze to configure
and administrate. Plus the comprehensive, accurate, and complete documentation
provided with the system means that I don&#8217;t have to scour the internet for help
only to find outdated tutorials or complicated documentation.</p>
		]]></content>
	</entry>

</feed>
