<?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>2023-07-27T19:20:36Z</updated>
	<id>http://www.paritybit.ca/</id>
	<generator>sbs</generator>

	<entry>
		<title>Computers as Workspaces</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/computers-as-workspaces.html" />
		<id>http://www.paritybit.ca/blog/computers-as-workspaces.html</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 <a href="http://ratfactor.com">Dave Gauer&#8217;s site</a> about
how he treats different computers as <a href="https://ratfactor.com/cards/computers-as-workspaces">different physical
workspaces</a>. That,
along with Josh Ginter&#8217;s post on <a href="https://thenewsprint.co/2022/03/28/keeping-a-separate-creativity-computer/">keeping a separate creativity
computer</a>
and Alexander Cobleigh&#8217;s post on making a <a href="https://cblgh.org/social%20media%20computer/">social media
computer</a> 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>
		]]></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.html" />
		<id>http://www.paritybit.ca/blog/openbsd-on-the-dell-xps-13-9380.html</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 <a href="/uses#laptops">Mid-2009 MacBook
Pro</a> 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/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>

<figure>
    <a href="/img/xps/xps.jpg">
    <img src="/img/xps/xps.jpg" alt="A Dell XPS laptop lying closed at an angle on a table." />
    </a>
</figure>

<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="#openbsd-support-log">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>

<figure>
    <a href="/img/xps/xps-open-on.jpg">
    <img src="/img/xps/xps-open-on.jpg" alt="The laptop open and on, showing this blog post in a vim window." />
    </a>
</figure>

<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>

<figure>
    <a href="/img/xps/xps-keyboard.jpg">
    <img src="/img/xps/xps-keyboard.jpg" alt="A top-down view of the keyboard of the laptop." />
    </a>
</figure>

<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. Battery life is roughly 5-6 hours on OpenBSD and
estimated at 9-12 hours on Linux, depending on the workload and screen
brightness. This makes sense given that OpenBSD does not implement a lot of the
powersave functionality in most (if not all) of its drivers.</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>

<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 after aforementioned tweaks.</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 after aforementioned tweaks.</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.html" />
		<id>http://www.paritybit.ca/blog/styling-external-links.html</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.html" />
		<id>http://www.paritybit.ca/blog/free-software-is-an-abject-failure.html</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> 2023-07-27</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>

<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://mu.se/newsroom/tpost/6dhedma301-muse-group-acquires-audacity-expanding-c">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, 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="fnref1"><a href="#fn1" rel="footnote">1</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="fnref2"><a href="#fn2" rel="footnote">2</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, 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 license. 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> to
developers<sup id="fnref3"><a href="#fn3" rel="footnote">3</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://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="/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>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="#fnref1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn2">
<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="#fnref2" rev="footnote">&#8617;</a></p>
</li>

<li id="fn3">
<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="#fnref3" 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.html" />
		<id>http://www.paritybit.ca/blog/a-git-workflow-with-claws-mail.html</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>

<figure>
    <a href="/img/claws-mail-actions.png"><img src="/img/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'."/></a>
</figure>

<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="/vid/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>Laptops Suck (Why I Might Get a New MacBook Air)</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/laptops-suck-why-i-might-get-a-macbook-air.html" />
		<id>http://www.paritybit.ca/blog/laptops-suck-why-i-might-get-a-macbook-air.html</id>
		<updated>2021-08-18T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="laptops-suck-why-i-might-get-a-new-macbook-air">Laptops Suck (Why I Might Get a New MacBook Air)</h1>

<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2021-08-18</p>

<div class="note"> <p>TL;DR: Watch this <a
href="https://www.youtube.com/watch?v=X0DIHlnD_S0">video by Wolfgang's
Channel</a>. It covers just about everything I talk about in this post,
including the negative aspects of the M1 MacBook Air, minus the personal
context and rant about modern laptops.</p></div>

<p>If you&#8217;ve been a part of the computing industry in almost any aspect for a
while, you&#8217;ll no doubt know about the trend of laptops becoming worse as time
goes on. What used to be upgradable components became soldered, removable
batteries became internalized and eventually glued in, and build quality
decreased year over year. Nowadays, one seems to have two choices in the PC
laptop market: buy a cheap, creaky mess of plastic with low-performance
internals, or buy a possibly well-built yet overpriced laptop that may perform
well, but does so at the cost of noise and usually battery life.</p>

<p>Frankly, the only ones offering a viable alternative to this mess is Apple.</p>

<p>Yep, you heard me right.</p>

<p>Apple used to be just as bad as the rest: you used to get an overheating,
<em>horrendously</em> overpriced (a fully-specced 16&#8221; MacBook Pro would run you $4,000
USD!) laptop with a terrible keyboard, but with their M1 chip this has changed
completely. You can now get a laptop that not only has outstanding build
quality, all-day battery life, an excellent screen, a great keyboard, and
<strong>desktop-level</strong> performance, but at <strong>half the price</strong> of comparable PC
laptops while also being <strong>fanless</strong>.</p>

<p>If that hasn&#8217;t yet convinced you, keep reading.</p>

<h2 id="price-to-performance">Price to Performance</h2>

<p>I think we can all agree that Macs had pretty terrible price to performance
when they used Intel processors. Given that a 2020 base model MacBook Air was
$999 USD yet had a CPU that fared not much better than my current Lenovo
Thinkpad T420s in benchmarks and overheated so fast you couldn&#8217;t even get
remotely close to its full performance&#8230; yeah, that was pretty bad. However,
this has completely changed with the M1. Now we have a $999 laptop with
performance comparable to many Ryzen desktop systems that sips power and, yes
will heat up if you&#8217;re doing heavy tasks, but won&#8217;t take massive hits to
performance just because it can&#8217;t handle the heat.</p>

<figure>
    <a href="/img/m1-cpubenchmark.png"><img src="/img/m1-cpubenchmark.png"
    alt="Benchmark comparison of the M1 chip next to several Ryzen desktop
    chips on cpubenchmark.net"/></a>
    <figcaption><a href="https://www.cpubenchmark.net/compare/Apple-M1-8-Core-3200-MHz-vs-AMD-Ryzen-5-1600-vs-AMD-Ryzen-5-3600X-vs-AMD-Ryzen-5-5600X-vs-AMD-Ryzen-9-5950X/4104vs2984vs3494vs3859vs3862">Source of this comparison.</a></figcaption>
</figure>

<p>In the image above, the M1 is compared to the Ryzen 5 1600 (the same CPU I have
in my desktop computer from 2017), and the Ryzen 5 3600X, Ryzen 5 5600X, and
Ryzen 9 5950X. This benchmark clocks the M1 chip at being overall faster than
the Ryzen 5 1600, and even still beating the Ryzen 9 5950X in single-core
computations (though, of course, the 32 threads in the 5950X means it&#8217;s much
better at multi-threaded stuff than the M1 with its 8). That means this mobile
CPU which can fit in a fanless system and draws a meagre 15.1 Watts is more
powerful than a 65 Watt TDP desktop CPU from 2017 and 2018 as well as
competitive in single-core tasks with even recent Ryzen CPUs.</p>

<p>Further videos on the internet comparing performance such as <a href="https://www.youtube.com/watch?v=KE-hrWTgDjk">this video from
LTT</a> and <a href="https://www.youtube.com/watch?v=X0DIHlnD_S0">this video from
Wolfgang&#8217;s Channel</a> shows that,
while the M1 trades blows with its AMD and Intel counterparts in some cases, it
drastically outperforms almost all of the competition. For most of what I will
be doing with the PC, the M1 Air absolutely blows my existing computers out of
the water in terms of performance for less than the amount of money I spent on
my desktop system in 2017 and in a—I can&#8217;t stress this enough—<strong>fanless
laptop</strong>.</p>

<h2 id="build-quality-and-keyboard">Build Quality and Keyboard</h2>

<p>Macs tend to have excellent physical build quality. There is little to no flex
of the chassis when typing on the keyboard, the screen doesn&#8217;t wobble when you
adjust it or while you&#8217;re typing, and you can hold the laptop by a corner
without creaking plastic noises. Since they switched to their Magic Keyboard™®©
from their utter disaster the Butterfly Keyboard™®©, their keyboards also feel
very nice to type on again and won&#8217;t spontaneously break from normal usage.</p>

<p>According to a friend of mine who switched from a Thinkpad X1 Carbon Gen. 6 to
an M1 MacBook Air, the keyboard is miles better than not only that, but also
Cherry MX switches. According to the aforementioned video from Wolfgang&#8217;s
Channel, the keyboard is not as good as his Thinkpad X1 Carbon&#8217;s. So, while it
does seem to be a matter of personal preference, if this keyboard is anything
like their early 2010s MacBook keyboards (a keyboard I have actually used) then
it will feel, to me, even better than my T420s keyboard.</p>

<h2 id="fanless-operation">Fanless Operation</h2>

<p>I know I keep going on about how the Air is fanless, but that&#8217;s actually
something I would really like to have in a laptop. My current T420s is hot and
loud and it really shows it. Just sitting on the desktop, at idle, the CPU is
at about 45°C with the fan audible. When I&#8217;m browsing the web, it easily spikes
to 60% or 80% utilization, and it&#8217;s not uncommon for the CPU to hit 85°C and
the fan to be going full-speed if I&#8217;m flipping back and forth between tabs or
on any particularly heavy tabs (yes, I&#8217;ve cleaned out and re-pasted this
computer&#8230; twice). This is such a problem that my laptop will overheat if I
have it on my lap without wearing long pants (i.e. the bottom of the laptop is
touching my legs) for an extended period of time and the amount of heat put
out by this machine has even bothered people who sit next to me as I use my
computer. Modern laptops might be better, but they&#8217;re still annoyingly noisy
when doing anything intensive.</p>

<p>Having a fanless laptop will certainly be a luxury. When using my laptop on the
couch or in bed, I won&#8217;t have to worry about whether or not the fans can
breathe, I won&#8217;t have to worry about the fan noise of my laptop or the blast of
heat shooting out the side annoying anybody near me, and I won&#8217;t have to worry
about cleaning out the computer every two to three years just to keep it
running well.</p>

<h2 id="the-screen">The Screen</h2>

<p>Since Apple released their Retina™®© displays, they have been known for making
stunningly good displays. They continue this trend with the M1 MacBooks by
putting a 2560x1600 (that&#8217;s a 16:10 display ratio, much nicer than 16:9 for
productivity), in a 13.3&#8221; screen for a wonderfully crisp 227 PPI. Not only will
this be way better than my current 1600x900 display in a 14&#8221; screen, it will
also be far better than the 1920x1080 displays one could normally get on
competing laptops (without spending out a lot more money).</p>

<p>A good screen with sharp text is something I&#8217;ve wanted for a long time since
using 4K 27&#8221; displays at work and since I read <a href="https://tonsky.me/blog/monitors/">this blog post by Nikita on
tonsky.me about better monitors</a>. It makes a
huge difference, especially for those who work primarily with text (me) in
terms of comfort and clarity.</p>

<h2 id="battery-life">Battery Life</h2>

<p>One thing that Apple has pretty much always been good at is jamming massive
batteries into their laptops. If I had to guess based on pictures of internals,
more than 50% of the internal space of a MacBook is taken up by batteries. This
gives them battery lifetimes often much greater than competing laptops with
similar performance. In the case of the M1, this is dialed up to the maximum
because they combined their regular massive battery capacity with a chip that
sips power. One can easily go a full day using their M1 MacBook without needing
to charge their laptop. This is a huge upgrade from my Thinkpad which gets
about 1 hour of battery life on a replacement battery purchased just one year
ago (turns out that having a CPU that gets hit with regular near-100%
utilization is not great for battery life).</p>

<h2 id="macos">MacOS</h2>

<p>I know a lot of Linux and Windows users look at MacOS and think: &#8220;How could
anybody use <em>that</em>!?&#8221; I know, I used to be one of them. At work when I got a
Mac (a 2013 Mac Pro, to be precise) I was just endlessly frustrated at how
MacOS felt. But, frankly, I just had a closed mind and wanted to hate it, so I
did. Of course, a completely different operating system and desktop environment
requires some effort to learn and get used to; exactly what we tell people
switching over from Windows to Linux.</p>

<p>In reality, MacOS is a competent *nix system. It&#8217;s based on Darwin BSD, has zsh
as a default shell with others also installed, has its own package manager
<a href="https://brew.sh">homebrew</a>, and has a perfectly competent terminal emulator.
In reality, I can do everything I would want to do on my computer on MacOS
without having to go through the hoops required on Windows.</p>

<p>Not to mention, my printer+scanner will actually work without endless fiddling
or needing to reboot into Windows.</p>

<h2 id="but-its-apple">But It&#8217;s Apple!!!</h2>

<p>Yeah, I know. Apple is not a good company. They are consistently against <a href="https://www.nytimes.com/wirecutter/blog/what-is-right-to-repair/">right
to repair</a>,
lock down the upgradablilty and repairability of their products, and the
majority of the operating system is proprietary (though, it&#8217;s worth noting that
they&#8217;re still far better than Microsoft when it comes to <a href="https://opensource.apple.com/">their open source
efforts</a>, having made and released WebKit, CUPS,
Bonjour, and more).</p>

<p>But this isn&#8217;t much different than most of the PC manufacturers. With many
modern laptops you are quite limited in terms of what you can upgrade. For
most, you can upgrade the SSD and the RAM and that&#8217;s about it. Many parts for
discontinued laptops are also hard to come by or expensive, unless they were
insanely popular.</p>

<p>It&#8217;s also worth noting that, in the case of the M1, you can&#8217;t upgrade the RAM
because it is a system-on-chip (SoC) design similar to how the Pinebook and
most ARM-based computers are built. However, that&#8217;s not really an issue since
MacOS handles low memory conditions very well and I personally have no need for
more than 16GB of RAM. I haven&#8217;t needed more than 16GB of RAM for half a decade
and I don&#8217;t see that changing anytime soon given that I routinely use less than
4GB on my workstations.</p>

<h2 id="alternative-options">Alternative Options</h2>

<p>So, if I&#8217;m looking for a high quality, performant laptop for a good price then
what are my other options in today&#8217;s market?</p>

<p>If I really want a fanless design I could either get a Chromebook or a
Microsoft Surface. The Chromebooks universally suffer from terrible build
quality or awful performance and the Surface laptops might be quite good
(relatively speaking), but then I&#8217;m stuck with a product locked down by
Microsoft and I much prefer MacOS to Windows. Surface computers also suffer
from exactly the same repairability issues as Apple computers.</p>

<p>If I want something that does perform well and is well-built then I suppose I
could go with a Dell XPS. They are &#8220;the MacBooks of the PCs&#8221; in terms of their
build quality after all. But they&#8217;re also over twice the price as the M1 Air
with worse performance and they can get very loud when doing intensive tasks
like compiling software. If you&#8217;re thinking: &#8220;Why not get a Thinkpad,&#8221; it&#8217;s
because modern Thinkpads have terrible build quality and are also monumentally
more expensive than these new MacBooks for the performance you get. They suffer
from the same problems as the XPS but aren&#8217;t even well-built.</p>

<p>Finally, in terms of a decent laptop that is repairable and upgradable, there
is the new Framework laptop. While this does seem quite promising, it&#8217;s hot (it
has an Intel processor) and doesn&#8217;t offer anywhere near the price to
performance of these new MacBooks (once again, it has an Intel processor),
though they are at least a strong competitor. The build quality, while decent,
is also <a href="https://jcs.org/2021/08/06/framework#hardware">still lacking compared to
Apple</a>.</p>

<h2 id="summary">Summary</h2>

<p>All in all, the pros of an M1 MacBook Air far outweigh the cons. Let&#8217;s go over them:</p>

<ul>
<li><strong>Fanless</strong> - It&#8217;s silent and no need to worry about airflow or cleaning</li>
<li><strong>Excellent</strong> build quality - Not a plastic piece of e-waste (looking at you, Clevo chassis-resellers)</li>
<li><strong>Great battery life</strong> - Easily all-day battery life, even when using it intensively</li>
<li><strong>Good keyboard</strong> - Something that I&#8217;ll actually enjoy typing on when I&#8217;m away from home</li>
<li><strong>Outstanding Performance</strong> - Competitive with Ryzen 7 2700s in multi-core, and the latest Ryzen processors in single-core performance</li>
<li><strong>No T2 Chip</strong> - The M1 computers no longer have the annoying T2 chip, so other OSes could conceivably be installed in the future</li>
<li><strong>Unbeatable Price</strong> - Competing laptops are twice the price or more, for worse performance, build quality, noise, or a combination of those</li>
<li><strong>No Touchbar</strong> - I don&#8217;t like the touchbar, so I&#8217;m glad the Air doesn&#8217;t have it</li>
<li><strong>Thin as heck</strong> - It&#8217;s a laptop as powerful as a desktop, thinner than the screen on my T420s</li>
</ul>

<p>And what about the cons:</p>

<ul>
<li><strong>Apple</strong> - They&#8217;re a bad company, and it doesn&#8217;t make me feel good to buy something from them</li>
<li><strong>Non-replaceable SSD</strong> - The SSD could wear out and you can&#8217;t easily replace them which would render the computer useless, but this probably won&#8217;t matter in the lifetime of the device, since one would have to write terabytes of data to their SSD each day to even come close to wearing it out in a couple of years.</li>
</ul>

<p>I&#8217;ve never owned a Mac (or any Apple product, for that matter). I currently own
a T420s because I like the aesthetics and keyboards of old Thinkpads but,
honestly, it&#8217;s just not cutting it anymore. A decade old computer is finally
starting to show its age and it&#8217;s time for an upgrade. When nearly every other
option on the market (including recent second-hand laptops) aside from the M1
Macs kinda suck, well, I&#8217;m going to choose the best option for the money I have
and right now that looks like it&#8217;s the M1 MacBook Air.</p>

<div class="note">
<p>I ended up getting a used <a
href="/blog/openbsd-on-the-dell-xps-13-9380">Dell XPS</a> in the end for
cost, OS-compatability, and ethical reasons. I just wasn't comfortable
directly supporting Apple by buying one of their products, and I wanted
to be able to run OpenBSD.</p>
</div>
		]]></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.html" />
		<id>http://www.paritybit.ca/blog/mastodon-is-dead-long-live-misskey.html</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="/img/misskey/admin-overview.png"><img src="/img/misskey/admin-overview-thumb.png"></a>
    <figcaption>The Admin Overview - Showing an overview of server resource usage and activity</figcaption>
</figure>

<figure>
    <a href="/img/misskey/federation.png"><img src="/img/misskey/federation-thumb.png"></a>
    <figcaption>The Federation Panel - Showing stats about which servers might be down</figcaption>
</figure>

<figure>
    <a href="/img/misskey/database.png"><img src="/img/misskey/database-thumb.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="/img/misskey/drive.png"><img src="/img/misskey/drive-thumb.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="/img/misskey/threading.png"><img src="/img/misskey/threading-thumb.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="/img/misskey/mfm.png"><img src="/img/misskey/mfm-thumb.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="/img/misskey/widgets.png"><img src="/img/misskey/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.html" />
		<id>http://www.paritybit.ca/blog/migrating-from-nginx-to-openbsd-httpd-and-relayd.html</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>
    <a href="/img/openbsd-logo.png"><img src="/img/openbsd-logo.png" alt="The OpenBSD logo."/></a>
    <figcaption>This logo is subject to the license at: <a href="https://www.openbsd.org/art4.html">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/openbsd-server.html">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
<a href="http://ftp.paritybit.ca">ftp.paritybit.ca</a> 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>

	<entry>
		<title>Flip Phone Challenge Complete</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/flip-phone-challenge-complete.html" />
		<id>http://www.paritybit.ca/blog/flip-phone-challenge-complete.html</id>
		<updated>2020-12-10T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="flip-phone-challenge-complete">Flip Phone Challenge Complete</h1>

<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-12-10</p>

<p>Last week <a href="https://paritybit.ca/blog/flip-phone-challenge">I challenged myself to use a flip
phone</a> for one week straight.
It turns out that it really wasn&#8217;t too hard to get rid of my Android phone and
start exclusively using the flip phone. I&#8217;ve decided I&#8217;m going to keep using
this flip phone as long as I can.</p>

<p>The experience has been great. Calling and texting is incredibly simple. I start
pressing numbers on the keypad and the phone does the thing. I don&#8217;t have to
unlock my phone, tap on an app, then tap on the little keypad button, then
suffer the 500ms delay between pressing a number and having it show up on the
screen. It&#8217;s the little annoyances which add up with modern technology that
makes using relatively limited devices such as a flip phone feel just that much
better.</p>

<p>I don&#8217;t use my phone at all outside of calling and texting now. I&#8217;ve totally
freed myself from the burden of being always connected and (nearly) always
available. When I turn off my computer that&#8217;s it; I am disconnected from
everything but people who need to urgently call or text me. I also no longer
wake up and check on everything while lying in bed for 20 minutes. I get up, get
ready, then head to my computer. The same goes for falling asleep: when I&#8217;m in
bed to sleep, I sleep. I don&#8217;t lie there for 20-30 minutes browsing things.</p>

<p>By the time I got to the end of the week, I had only used up ~1&#47;2 of the phone&#8217;s
charge. Part of it is indeed that I don&#8217;t use it nearly as much as I did my
Android phone, but it&#8217;s nice to not have to charge my phone everyday or worry
about it running out of battery by the end of the day.</p>

<p>The only drawback I can see to using this flip phone instead of a smartphone is
that I won&#8217;t be able to listen to music or podcasts on the go when we all start
having to commute again. It&#8217;s unfortunate, but I could always either get a
portable music player or maybe bust out my cassette-based Walkman again.
(Recording a podcast onto a cassette, then playing it on my commute&#8230; now
that&#8217;s an idea.)</p>

<p>To sum it all up: I really honestly do not miss my Android phone. It was more a
source of annoyance and distraction than a utility in my daily life. I feel more
free and much happier using a phone that simply can&#8217;t do much but be a phone.</p>
		]]></content>
	</entry>

	<entry>
		<title>One Week Flip Phone Challenge</title>
		<author><name>Jake Bauer</name></author>
		<link href="http://www.paritybit.ca/blog/flip-phone-challenge.html" />
		<id>http://www.paritybit.ca/blog/flip-phone-challenge.html</id>
		<updated>2020-11-30T00:00:00Z</updated>
		<content type="html"><![CDATA[
<h1 id="one-week-flip-phone-challenge">One Week Flip Phone Challenge</h1>

<p><strong>Author:</strong> Jake Bauer | <strong>Published:</strong> 2020-11-30</p>

<p>Recent frustration with my smartphone has led me to throw it aside (quite
literally, I threw it onto my bed in frustration one day) in favour of using a
good old flip phone again. I&#8217;ve challenged myself to use one for at least one
week to see what the experience is like in 2020.</p>

<p>I normally carry with me an ASUS Zenfone II Laser Android smartphone running
LineageOS 15.1. It has served me well over the past 5 years and its battery
still lasts me a whole day&#8230; mostly. The things I normally do on my phone are:
call, text, use a Web browser, use the Element, Conversations, and Husky
applications, and check the weather if I&#8217;m bored. I sometimes listen to
podcasts with it but I&#8217;ve stopped in recent months. I also have the OsmAnd~ map
application, but GPS stopped working on my phone some time ago and I rarely, if
ever, open it. I don&#8217;t even take pictures on my phone anymore thanks to some
weird fogging that&#8217;s happened to the camera lens.</p>

<p>For this challenge, I&#8217;ve chosen a Doro PhoneEasy 612. Pretty much entirely
because it&#8217;s what I had on hand. There&#8217;s nothing special about it, it&#8217;s a
standard flip phone with a 12 key dial pad, some extra buttons, a 2 megapixel
camera, a 2.5mm headphone jack (not 3.5mm), and it charges via Micro-USB like my
existing Android phone. On the inside, it has a 3.7V, 800mAh (2.96Wh) battery, a
mini-SIM card slot (though I was able to position my micro-SIM card just right
to get it to work), and a microSD card slot.</p>

<figure>
    <a href="/img/flip-phone-open.png"><img src="/img/flip-phone-open-thumb.png"
    alt="An image of the Doro PhoneEasy 612 lying open on my desk with the
    screen on the home page."/></a>
</figure>

<p>After inserting my SIM card and powering on the phone, it asked me to go through
a setup wizard so that I could set the date and time, ringtones, volume, and so
on. After a couple of minutes, I was on the home screen with the world at my
fingertips. By the way, this phone powers on in under three seconds (!!!)
compared to the minute-and-a-half my Android phone takes.</p>

<p>This phone comes with a phonebook (which conveniently contained all of my
contacts because I saved my contacts to my SIM card instead of my Android
phone), messaging application, call log viewer, camera application, image
viewer, alarm, organizer&#47;calendar, calculator, FM radio (which only works if you
plug in headphones), In Case of Emergency application (something that stores
useful information about you in case of emergency), games (Tetris and something
called Boxman), and a settings application. All-in-all very bare-bones but it
does everything I think I need.</p>

<p>So, let&#8217;s see how this goes. One week using just a flip phone. I&#8217;ve even gone so
far as to completely power off my Android phone and put it in a filing cabinet
so I won&#8217;t even use it to browse memes in bed. I predict that this won&#8217;t be too
difficult because we&#8217;re all stuck inside due to the pandemic, but it will still
be interesting to see what it&#8217;s like, especially since I do compulsively use my
phone before going to sleep and right after waking up.</p>
		]]></content>
	</entry>

</feed>
