<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://writings.hongminhee.org/feed.en.xml</id>
  <link rel="self" type="application/atom+xml" href="https://writings.hongminhee.org/feed.en.xml" />
  <link rel="alternate" type="text/html" href="https://writings.hongminhee.org/" />
  <generator uri="https://github.com/dahlia/jikji">Jikji</generator>
  <title>Hong Minhee on Things</title>
  
    <author>
      <name>Hong Minhee</name>
      
        <uri>https://hongminhee.org/</uri>
      
      
    </author>
  
  <updated>2026-04-17T08:52:06.579Z</updated>

  
    <entry>
     <title>Is legal the same as legitimate: AI reimplementation and the erosion of copyleft</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/"
         
         />
       
         <id>https://writings.hongminhee.org/2026/03/legal-vs-legitimate/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/legal-vs-legitimate/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2026-03-09T15:10:00.000Z</published>
     <updated>2026-04-17T08:52:06.578Z</updated>
     <content type="html">&lt;h1&gt;Is legal the same as legitimate: AI reimplementation and the erosion of copyleft&lt;/h1&gt;
&lt;p&gt;Last week, Dan Blanchard, the maintainer of chardet—a Python library for
detecting text encodings used by roughly 130 million projects a
month—&lt;a href=&quot;https://github.com/chardet/chardet/releases/tag/7.0.0&quot;&gt;released a new version&lt;/a&gt;. Version 7.0 is 48 times faster than its
predecessor, supports multiple cores, and was redesigned from the ground up.
Anthropic&#39;s Claude is listed as a contributor. The license changed from LGPL to
MIT.&lt;/p&gt;
&lt;p&gt;Blanchard&#39;s account is that he never looked at the existing source code
directly. He fed only the API and the test suite to Claude and asked it to
reimplement the library from scratch. The resulting code shares less than 1.3%
similarity with any prior version, as measured by JPlag. His conclusion: this
is an independent new work, and he is under no obligation to carry forward the
LGPL. Mark Pilgrim, the library&#39;s original author,
&lt;a href=&quot;https://github.com/chardet/chardet/issues/327&quot;&gt;opened a GitHub issue to object&lt;/a&gt;. The LGPL requires that modifications be
distributed under the same license, and a reimplementation produced with ample
exposure to the original codebase cannot, in Pilgrim&#39;s view, pass as a
clean-room effort.&lt;/p&gt;
&lt;p&gt;The dispute drew responses from two prominent figures in the open source world.
Armin Ronacher, the creator of Flask, &lt;a href=&quot;https://lucumr.pocoo.org/2026/3/5/theseus/&quot;&gt;welcomed the relicensing&lt;/a&gt;. Salvatore
Sanfilippo (antirez), the creator of Redis,
&lt;a href=&quot;https://antirez.com/news/162&quot;&gt;published a broader defense of AI reimplementation&lt;/a&gt;, grounding it in
copyright law and the history of the GNU project. Both conclude, by different
routes, that what Blanchard did is legitimate. I respect both writers, and I
think both are wrong—or more precisely, both are evading the question that
actually matters.&lt;/p&gt;
&lt;p&gt;That question is this: does legal mean legitimate? Neither piece answers it.
Both move from “this is legally permissible” to “this is therefore fine,”
without pausing at the gap between those two claims. Law sets a floor; clearing
it does not mean the conduct is right. That gap is where this essay begins.&lt;/p&gt;
&lt;h2&gt;The analogy points the wrong way&lt;/h2&gt;
&lt;p&gt;Antirez builds his case on history. When the GNU project reimplemented the UNIX
userspace, it was lawful. So was Linux. Copyright law prohibits copying
“protected expressions”—the actual code, its structure, its specific
mechanisms—but it does not protect ideas or behavior. AI-assisted
reimplementation occupies the same legal ground. Therefore, it is lawful.&lt;/p&gt;
&lt;p&gt;The legal analysis is largely correct, and I am not disputing it. The problem
lies in what antirez does next: he presents the legal conclusion as if it were
also a social one, and uses a historical analogy that, examined more carefully,
argues against his own position.&lt;/p&gt;
&lt;p&gt;When GNU reimplemented the UNIX userspace, the vector ran from proprietary to
free. Stallman was using the limits of copyright law to turn proprietary
software into free software. The ethical force of that project did not come
from its legal permissibility—it came from the direction it was moving, from
the fact that it was expanding the commons. That is why people cheered.&lt;/p&gt;
&lt;p&gt;The vector in the chardet case runs the other way. Software protected by a
copyleft license—one that guarantees users the right to study, modify, and
redistribute derivative works under the same terms—has been reimplemented under
a permissive license that carries no such guarantee. This is not a
reimplementation that expands the commons. It is one that removes the fencing
that protected the commons. Derivative works built on chardet 7.0 are under no
obligation to share their source code. That obligation, which applied to a
library downloaded 130 million times a month, is now gone.&lt;/p&gt;
&lt;p&gt;Antirez does not address this directional difference. He invokes the GNU
precedent, but that precedent is a counterexample to his conclusion, not a
supporting one.&lt;/p&gt;
&lt;h2&gt;Does the GPL work against sharing?&lt;/h2&gt;
&lt;p&gt;Ronacher&#39;s argument is different. He discloses upfront that he has a stake in
the outcome: “I personally have a horse in the race here because I too wanted
chardet to be under a non-GPL license for many years. So consider me a very
biased person in that regard.” He goes on to write that he considers “the GPL
to run against that spirit by restricting what can be done with it”—the spirit
being that society is better off when we share.&lt;/p&gt;
&lt;p&gt;This claim rests on a fundamental misreading of what the GPL does.&lt;/p&gt;
&lt;p&gt;Start with what the GPL actually prohibits. It does not prohibit keeping source
code private. It imposes no constraint on privately modifying GPL software and
using it yourself. The GPL&#39;s conditions are triggered only by &lt;em&gt;distribution&lt;/em&gt;.
If you distribute modified code, or offer it as a networked service, you must
make the source available under the same terms. This is not a restriction on
sharing. It is a condition placed on sharing: if you share, you must share in
kind.&lt;/p&gt;
&lt;p&gt;The requirement that improvements be returned to the commons is not a mechanism
that suppresses sharing. It is a mechanism that makes sharing recursive and
self-reinforcing. The claim that imposing contribution obligations on users of
a commons undermines sharing culture does not hold together logically.&lt;/p&gt;
&lt;p&gt;The contrast with the MIT license clarifies the point. Under MIT, anyone may
take code, improve it, and close it off into a proprietary product. You can
receive from the commons without giving back. If Ronacher calls this structure
“more share-friendly,” he is using a concept of sharing with a specific
directionality built in: sharing flows toward whoever has more capital and more
engineers to take advantage of it.&lt;/p&gt;
&lt;p&gt;The historical record bears this out. In the 1990s, companies routinely
absorbed GPL code into proprietary products—not because they had chosen
permissive licenses, but because copyleft enforcement was slack. The
strengthening of copyleft mechanisms closed that gap. For individual developers
and small projects without the resources to compete on anything but
reciprocity, copyleft was what made the exchange approximately fair.&lt;/p&gt;
&lt;p&gt;The creator of Flask knows this distinction. If he elides it anyway, the
argument is not naïve—it is convenient.&lt;/p&gt;
&lt;h2&gt;A self-refuting example&lt;/h2&gt;
&lt;p&gt;The most interesting moment in Ronacher&#39;s piece is not the argument but a
detail he mentions in passing: Vercel &lt;a href=&quot;https://just-bash.dev/&quot;&gt;reimplemented GNU Bash using AI&lt;/a&gt; and
published it, then &lt;a href=&quot;https://x.com/cramforce/status/2027155457597669785&quot;&gt;got visibly upset&lt;/a&gt; when Cloudflare
&lt;a href=&quot;https://blog.cloudflare.com/vinext/&quot;&gt;reimplemented Next.js&lt;/a&gt; the same way.&lt;/p&gt;
&lt;p&gt;Ronacher notes this as an irony and moves on. But the irony cuts deeper than he
lets on. Next.js is MIT licensed. Cloudflare&#39;s vinext did not violate any
license—it did exactly what Ronacher calls a contribution to the culture of
openness, applied to a permissively licensed codebase. Vercel&#39;s reaction had
nothing to do with license infringement; it was purely competitive and
territorial. The implicit position is: reimplementing GPL software as MIT is a
victory for sharing, but having our own MIT software reimplemented by a
competitor is cause for outrage. This is what the claim that permissive
licensing is “more share-friendly” than copyleft looks like in practice. The
spirit of sharing, it turns out, runs in one direction only: outward from
oneself.&lt;/p&gt;
&lt;p&gt;Ronacher registers the contradiction and does not stop. “This development plays
into my worldview,” he writes. When you present evidence that cuts against your
own position, acknowledge it, and then proceed to your original conclusion
unchanged, that is a signal that the conclusion preceded the argument.&lt;/p&gt;
&lt;h2&gt;Legality and social legitimacy are different registers&lt;/h2&gt;
&lt;p&gt;Back to the question posed at the start. Is legal the same as legitimate?&lt;/p&gt;
&lt;p&gt;Antirez closes his careful legal analysis as though it settles the matter.
Ronacher acknowledges that “there is an obvious moral question here, but that
isn&#39;t necessarily what I&#39;m interested in.” Both pieces treat legal
permissibility as a proxy for social legitimacy. But law only says what conduct
it will not prevent—it does not certify that conduct as right. Aggressive tax
minimization that never crosses into illegality may still be widely regarded as
antisocial. A pharmaceutical company that legally acquires a patent on a
long-generic drug and raises the price a hundredfold has not something legal,
but that does not make it fine. Legality is a necessary condition; it is not a
sufficient one.&lt;/p&gt;
&lt;p&gt;In the chardet case, the distinction is sharper still. What the LGPL protected
was not Blanchard&#39;s labor alone. It was a social compact agreed to by everyone
who contributed to the library over twelve years. The terms of that compact
were: if you take this and build on it, you share back under the same terms.
This compact operated as a legal instrument, yes, but it was also the
foundation of trust that made contribution rational. The fact that a
reimplementation may qualify legally as a new work, and the fact that it breaks
faith with the original contributors, are separate questions. If a court
eventually rules in Blanchard&#39;s favor, that ruling will tell us what the law
permits. It will not tell us that the act was right.&lt;/p&gt;
&lt;p&gt;Zoë Kooyman, executive director of the FSF, put it plainly: “Refusing to grant
others the rights you yourself received as a user is highly antisocial, no
matter what method you use.”&lt;/p&gt;
&lt;h2&gt;Whose perspective is the default?&lt;/h2&gt;
&lt;p&gt;Reading this debate, I keep returning to a question about position. From where
are these two writers looking at the situation?&lt;/p&gt;
&lt;p&gt;Antirez created Redis. Ronacher created Flask. Both are figures at the center
of the open source ecosystem, with large audiences and well-established
reputations. For them, falling costs of AI reimplementation means something
specific: it is easier to reimplement things they want in a different form.
Ronacher says explicitly that he had begun reimplementing GNU Readline
precisely because of its copyleft terms.&lt;/p&gt;
&lt;p&gt;For the people who have spent years contributing to a library like chardet, the
same shift in costs means something else entirely: the copyleft protection
around their contributions can be removed. The two writers are speaking from
the former position to people in the latter, telling them that this was always
lawful, that historical precedent supports it, and that the appropriate
response is adaptation.&lt;/p&gt;
&lt;p&gt;When positional asymmetry of this kind is ignored, and the argument is
presented as universal analysis, what you get is not analysis but
rationalization. Both writers arrive at conclusions that align precisely with
their own interests. Readers should hold that fact in mind.&lt;/p&gt;
&lt;h2&gt;What this fight points toward&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.theregister.com/2026/03/06/ai_kills_software_licensing/&quot;&gt;Bruce Perens, who wrote the original Open Source Definition, told &lt;cite&gt;The Register&lt;/cite&gt;&lt;/a&gt;:
“The entire economics of software development are dead, gone, over, kaput!” He
meant it as an alarm. Antirez, from a similar assessment of the situation,
draws the conclusion: adapt. Ronacher says he finds the direction exciting.&lt;/p&gt;
&lt;p&gt;None of the three responses addresses the central question. When copyleft
becomes technically easier to circumvent, does that make it less necessary, or
more?&lt;/p&gt;
&lt;p&gt;I think more. What the GPL protected was not the scarcity of code but the
freedom of users. The fact that producing code has become cheaper does not make
it acceptable to use that code as a vehicle for eroding freedom. If anything,
as the friction of reimplementation disappears, so does the friction of
stripping copyleft from anything left exposed. The erosion of enforcement
capacity is a legal problem. It does not touch the underlying normative
judgment.&lt;/p&gt;
&lt;p&gt;That judgment is this: those who take from the commons owe something back to
the commons. The principle does not change depending on whether a
reimplementation takes five years or five days. No court ruling on AI-generated
code will alter its social weight.&lt;/p&gt;
&lt;p&gt;This is where law and community norms diverge. Law is made slowly, after the
fact, reflecting existing power arrangements. The norms that open source
communities built over decades did not wait for court approval. People chose
the GPL when the law offered them no guarantee of its enforcement, because it
expressed the values of the communities they wanted to belong to. Those values
do not expire when the law changes.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;/2026/01/histomat-foss-llm/&quot;&gt;previous writing&lt;/a&gt;, I argued for a training
copyleft (TGPL) as the next step in this line of development. The chardet
situation suggests the argument has to go further: to a specification copyleft
covering the layer below source code. If source code can now be generated from
a specification, the specification is where the essential intellectual content
of a GPL project resides. Blanchard&#39;s own claim—that he worked only from the
test suite and API without reading the source—is, paradoxically, an argument
for protecting that test suite and API specification under copyleft terms.&lt;/p&gt;
&lt;p&gt;The history of the GPL is the history of licensing tools evolving in response
to new forms of exploitation: GPLv2 to GPLv3, then AGPL. What drove each
evolution was not a court ruling but a community reaching a value judgment
first and then seeking legal instruments to express it. The same sequence is
available now. Whatever courts eventually decide about AI reimplementation, the
question we need to answer first is not a legal one. It is a social one. Do
those who take from the commons owe something back? I think they do. That
judgment does not require a verdict.&lt;/p&gt;
&lt;p&gt;What makes the pieces by antirez and Ronacher worth reading is not that they
are right. It is that they make visible, with unusual clarity, what they are
choosing not to see. When legality is used as a substitute for a value
judgment, the question that actually matters gets buried in the footnotes of a
law it has already outgrown.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
     <title>Why craft-lovers are losing their craft</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/"
         
         />
       
         <id>https://writings.hongminhee.org/2026/03/craft-alienation-llm/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/03/craft-alienation-llm/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2026-03-21T09:30:00.000Z</published>
     <updated>2026-04-17T08:52:06.578Z</updated>
     <content type="html">&lt;h1&gt;Why craft-lovers are losing their craft&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.lmorchard.com/2026/03/11/grief-and-the-ai-split/&quot;&gt;Les Orchard&lt;/a&gt; made a quiet observation recently that I haven&#39;t been able to
shake. Before LLM coding assistants arrived, the split between developers was
invisible:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Craft-lovers and make-it-go people sat next to each other, shipped the same
products, looked indistinguishable. The &lt;em&gt;motivation&lt;/em&gt; behind the work was
invisible because the &lt;em&gt;process&lt;/em&gt; was identical.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The tools didn&#39;t create a division; they simply revealed an existing one.&lt;/p&gt;
&lt;p&gt;Orchard himself belongs to the first camp. He learned BASIC at age seven not
because BASIC was beautiful but because he wanted things to happen on screen.
For him, LLM coding assistants are just another rung on the same ladder he&#39;s
always been climbing. The puzzle didn&#39;t disappear; it moved to a higher level
of abstraction. He grieves, but what he grieves is the ecosystem around the
work, not the work itself.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://nolanlawson.com/2026/02/07/we-mourn-our-craft/&quot;&gt;Nolan Lawson&lt;/a&gt; grieves differently:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We&#39;ll miss the feeling of holding code in our hands and molding it like clay
in the caress of a master sculptor. We&#39;ll miss the sleepless wrangling of
some odd bug that eventually relents to the debugger at 2 AM. We&#39;ll miss
creating something we feel proud of, something true and right and good.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His post reads like an elegy, and the grief in it is real. What he&#39;s mourning
is the act itself.&lt;/p&gt;
&lt;p&gt;Two developers, both thoughtful, both honest, looking at the same moment and
feeling different things. That asymmetry is worth taking seriously, because it
points to something the “just adapt” conversation keeps missing.&lt;/p&gt;
&lt;h2&gt;Alienated from the act&lt;/h2&gt;
&lt;p&gt;Marx identified four dimensions of alienated labor: separation from the product
of one&#39;s work, from the act of working itself, from other people, and from
one&#39;s own human capacities. In the context of LLM coding assistants, the second
of these is doing most of the work.&lt;/p&gt;
&lt;p&gt;What Marx meant by separation from the act is something like this. Humans,
unlike other animals, can imagine what they want to make before they make it
and then shape the material world to match that image. This capacity for
conscious, intentional creation is close to what Marx considered distinctively
human. When work is reduced to something mechanical, coerced, endured rather
than inhabited, that capacity goes unused. The activity is still happening; the
person is just no longer really present in it.&lt;/p&gt;
&lt;p&gt;The craft-lovers mourning their work fit this description. What they valued
wasn&#39;t the output. It was the process of building something, the hours of close
attention, the feeling of understanding a system well enough to reshape it.
Lawson says as much: the GitHub repo that says “I made this.” Not “something
was made” but &lt;em&gt;I&lt;/em&gt; made it.&lt;/p&gt;
&lt;p&gt;This also explains why the two camps feel so differently about the same tools.
Orchard never invested his sense of self in the act of writing code. He
invested it in the result. When LLM coding assistants let him get to the result
faster, nothing essential is lost for him. For Lawson, the act was where the
meaning lived. LLM coding assistants don&#39;t bypass the output; they bypass the
part he cared about. Marx&#39;s distinction between objective alienation (a
condition that exists regardless of whether you feel it) and subjective
alienation (experiencing the loss) maps almost exactly onto this split. Orchard
isn&#39;t subjectively alienated because he was never objectively attached to the
act in the first place. Lawson is both.&lt;/p&gt;
&lt;p&gt;The usual response is that this is nostalgia, or that new crafts will emerge to
replace the old ones. Maybe. But that response sidesteps the actual question:
why are people who love coding being pushed away from coding? Nobody is
stopping them from writing code by hand. The market is penalizing them for it.&lt;/p&gt;
&lt;h2&gt;Who&#39;s doing the penalizing&lt;/h2&gt;
&lt;p&gt;In &lt;em&gt;Capital&lt;/em&gt;, Marx wrote about the Luddite movement:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It took time and experience before the workers learnt to distinguish between
machinery and its employment by capital, and to transfer their attacks from
the material instruments of production to the form of society which utilises
those instruments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The workers who destroyed the looms weren&#39;t wrong to be angry. The direction
was off. Capital extended working hours, not the loom. Capital turned workers
into appendages of the machine, not the loom. The distinction matters because
it changes what the actual problem is, and therefore what might be done about
it.&lt;/p&gt;
&lt;p&gt;When a developer explains that their productivity is being measured against
colleagues who use LLM coding assistants, and that they&#39;re using them because
they need the job, not because they want to, the source of alienation is plain.
It isn&#39;t the LLM coding assistant. It&#39;s the structure that ties livelihood to a
metric, and that metric now favors whoever produces the most output the
fastest. The LLM coding assistant is the lever; the market is the mechanism.&lt;/p&gt;
&lt;p&gt;One caveat matters here. The tension between craft and efficiency doesn&#39;t
disappear if you remove capitalism from the picture. LLM coding assistants
produce faster results whether anyone is being paid or not, and any community,
however it&#39;s organized, will eventually have to reckon with what to do with
that speed difference. Capitalism gives the harshest possible answer to that
question: the slower worker loses their livelihood. But the question itself
would survive capitalism. Other forms of social organization might answer it
more gently, but they&#39;d still have to answer it.&lt;/p&gt;
&lt;h2&gt;What my situation reveals&lt;/h2&gt;
&lt;p&gt;I maintain open source software full time. My income comes entirely from public
funding: grants, foundations, institutional support. I have no employer who can
tell me to use LLM coding assistants or lose my job. No quarterly review where
my output gets compared to a colleague&#39;s.&lt;/p&gt;
&lt;p&gt;Under these conditions, my relationship with LLM coding assistants is nothing
like what Lawson describes. I still write the code I find interesting by hand.
The parts I don&#39;t want to do, the verbose test scaffolding and boilerplate I&#39;ve
written a hundred times, I hand to the model. The division follows a line I
drew myself, between work that expresses something and work that just needs to
happen.&lt;/p&gt;
&lt;p&gt;This is close to what Marx imagined machinery could do in conditions other than
capitalism: relieve people of repetitive labor so they could do something more
fully human with the time. The same tool can feel liberating in one set of
conditions and alienating in another.&lt;/p&gt;
&lt;p&gt;My situation is unusual, and it exists inside a capitalist economy, a partial
shelter rather than an escape. I&#39;m not presenting it as a solution, only as
evidence of that difference.&lt;/p&gt;
&lt;h2&gt;Where the grief should look&lt;/h2&gt;
&lt;p&gt;Knowing the source of a problem doesn&#39;t dissolve it. The developers being
pushed toward LLM coding assistants they don&#39;t want to use are facing a real
constraint right now, and a structural analysis doesn&#39;t help them this
afternoon.&lt;/p&gt;
&lt;p&gt;But it does change the question. If the grief Lawson describes is real (and I
think it is), and if its deeper cause lies in the social relations around the
technology rather than the technology itself, then the right target for that
grief isn&#39;t the LLM coding assistant. It&#39;s whatever forces people to use tools
they don&#39;t want to use, on terms they didn&#39;t choose.&lt;/p&gt;
&lt;p&gt;Lawson gestures in this direction too:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I don&#39;t celebrate the new world, but I also don&#39;t resist it. The sun rises,
the sun sets, I orbit helplessly around it, and my protests can&#39;t stop it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&#39;s honest. But I&#39;d like to think resignation isn&#39;t the only option.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
     <title>Acting materialistically in an imperfect world: LLMs as means of production and social relations</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/"
         
         />
       
         <id>https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/02/acting-materialistically-in-an-imperfect-world/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2026-02-21T21:40:00.000Z</published>
     <updated>2026-04-17T08:52:06.577Z</updated>
     <content type="html">&lt;h1&gt;Acting materialistically in an imperfect world: LLMs as means of production and social relations&lt;/h1&gt;
&lt;p&gt;&lt;small&gt;This is a follow-up to last month&#39;s
&lt;a href=&quot;/2026/01/histomat-foss-llm/&quot;&gt;Histomat of F/OSS: We should reclaim LLMs, not reject them&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Cory Doctorow &lt;a href=&quot;https://pluralistic.net/2026/02/19/now-we-are-six/&quot;&gt;celebrated the sixth anniversary of &lt;cite&gt;Pluralistic&lt;/cite&gt;&lt;/a&gt;
by walking readers through his publishing workflow. Among other things, he
mentioned running each post through Ollama, an open-source LLM, to catch typos
before publication. People reacted exactly as you would expect. Two days later,
German technology critic tante responded with a piece titled
&lt;cite&gt;&lt;a href=&quot;https://tante.cc/2026/02/20/acting-ethical-in-an-imperfect-world/&quot;&gt;Acting ethically in an imperfect world&lt;/a&gt;&lt;/cite&gt;.&lt;/p&gt;
&lt;p&gt;His title was too good not to borrow. Acting ethically in an imperfect
world: that is his question. I want to answer the same question on different
ground. Not ethics, but materialism.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;/2026/01/histomat-foss-llm/&quot;&gt;my previous piece&lt;/a&gt;, I pushed licensing too far to the front as a means
of reclaiming LLMs. I was called naïve, and I accept part of that criticism.
I was trying to point to a &lt;em&gt;direction&lt;/em&gt;, not lay down a program. Here I want
to state that more plainly.&lt;/p&gt;
&lt;h2&gt;Two strawmen&lt;/h2&gt;
&lt;p&gt;tante makes some fair points. Doctorow portrayed LLM critics as purists who
object to the technology because its creators are bad people—a strawman. The
actual criticisms come from somewhere else: the enormous consumption of
electricity and water, the collection of training data without consent, the
exploitative labeling work done in the Global South, the harm inflicted on the
knowledge commons including the open source ecosystem. Doctorow reduced all of
this to “you just don&#39;t like Sam Altman,” and tante was right to call that out.&lt;/p&gt;
&lt;p&gt;The Bluesky point lands too. Doctorow refused to create a Bluesky account on
ideological grounds, because he objects to the centralized control Bluesky&#39;s
corporation holds over the network. He believes in refusing technology based on
one&#39;s values, and he practices it. When others refuse LLMs for the same kind of
reason, he calls it purism. tante identified this double standard precisely.&lt;/p&gt;
&lt;p&gt;But tante falls into the same trap.&lt;/p&gt;
&lt;p&gt;In critiquing the direction of reclamation, he effectively limits it to one
path: building a frontier model from scratch that rivals GPT. That would take
billions of dollars and produce the same environmental costs, so reclamation is
unrealistic, or so the argument goes. But just as Doctorow oversimplified the
criticism of LLMs, tante oversimplified the paths to reclaiming them. There
is legal resistance through licensing, regulatory pressure that might compel
corporations to release proprietary models, the slower work of building public
foundation models. Which of these can actually work depends on political
and social conditions that haven&#39;t settled yet. When I mentioned licensing in
my previous piece, it was the first example that came to mind, nothing more.&lt;/p&gt;
&lt;h2&gt;Machinery and its capitalist application&lt;/h2&gt;
&lt;p&gt;In the first volume of &lt;em&gt;Capital&lt;/em&gt;, Marx assessed the Luddite movement in England:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It took time and experience before the workers learnt to distinguish between
machinery and its employment by capital, and to transfer their attacks from
the material instruments of production to the form of society which utilises
those instruments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The anger of the workers who smashed the looms was justified. The direction was
wrong. The problem was not the machinery but the capitalist social relations
surrounding it: machinery that extended working hours rather than shortening
them, that turned workers into appendages rather than freeing them. That was
not the nature of machinery; it was the nature of how it was deployed. Marx was
not mocking the Luddites. He was describing how a struggle matures.&lt;/p&gt;
&lt;p&gt;tante&#39;s approach is fundamentally ethical: he evaluates LLMs on moral grounds
and decides whether to use them accordingly. Doctorow&#39;s approach is not so
different; the evaluation just runs in the opposite direction. Both treat
technology as a moral object.&lt;/p&gt;
&lt;p&gt;A materialist approach asks different questions. What social relations does
this technology sit inside? Who owns it, whose labor maintains it, where does
the surplus go—and can those relations be changed?&lt;/p&gt;
&lt;p&gt;The “for or against AI” framing buries all of this. The reason it looks
inconsistent to criticize the major AI vendors while remaining open to LLMs as
a technology is that the framing assumes the technology and its capitalist
application are the same thing. That assumption is wrong.&lt;/p&gt;
&lt;h2&gt;Libraries and people&lt;/h2&gt;
&lt;p&gt;LLMs are not libraries. The criticism that a library connects people to the
original source while an LLM produces answers without one is not entirely
wrong. But I think LLMs are closer to people.&lt;/p&gt;
&lt;p&gt;Human beings spend their entire lives absorbing text, code, and images, without
asking permission from the copyright holders. They work that material into
something of their own and produce, at times, something that is little more
than pastiche and, at other times, connections nobody had made before.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.anthropic.com/engineering/building-c-compiler&quot;&gt;Nicholas Carlini at Anthropic recently ran an experiment&lt;/a&gt; in which he
tasked Claude Opus 4.6 with writing a C compiler in Rust from scratch, without
internet access, in a clean-room setting. The result was a
hundred-thousand-line compiler that builds the Linux 6.9 kernel on x86, ARM,
and RISC-V; compiles PostgreSQL, FFmpeg, SQLite, and Redis; and passes 99% of
the GCC torture test suite. To my knowledge, no Rust-written C compiler has
come close to that. It is hard to call this reproduction.&lt;/p&gt;
&lt;p&gt;That does not make them artists. It does mean the line that they “only
reproduce” is less solid than critics pretend.&lt;/p&gt;
&lt;p&gt;Not all generative AI is alike, and the difference is not purely technical. It
is a difference in what kind of labor is displaced and how. When an image
generation model produces work in the style of a specific artist, it directly
encroaches on that artist&#39;s market. What gets displaced there is not some
abstract function but a working artist trying to stay alive. Where the surplus
goes in that transaction is telling. Marx&#39;s &lt;em&gt;Verelendung&lt;/em&gt; of labor is more
directly at work in image generation than in LLMs. Whether the same measure
applies to LLMs is a much more complicated question.&lt;/p&gt;
&lt;h2&gt;The default viewpoint&lt;/h2&gt;
&lt;p&gt;One more thing, and it is personal.&lt;/p&gt;
&lt;p&gt;tante&#39;s essay is on the web, but it appears to be configured to serve garbage
to LLM scrapers. Korean is my first language; English is my second. A text like
tante&#39;s, where the nuances of the argument and its unstated premises matter,
does not survive conventional machine translation intact. You need something at
the level of an LLM for the reasoning to come through. I ended up copying the
essay by hand and feeding it to one.&lt;/p&gt;
&lt;p&gt;tante argues that LLMs sever the connection between reader and author: search
engines lead you to the original, while LLMs extract the content and keep you
inside their own loop. There is something to that. But my experience shows
whose perspective shaped that picture. If you already read English fluently,
an LLM can look like a machine for cutting readers off from authors. If you
do not, it can be the thing that lets the argument reach you at all. tante&#39;s
decision to block LLM scrapers is consistent with his own logic, but it ended
up reinforcing the asymmetry between readers who are fluent in English and
those who are not.&lt;/p&gt;
&lt;p&gt;That is not a side irony. It is the ordinary structure of technology discourse.
Whose viewpoint is set as the default? What social relations produced that
default?&lt;/p&gt;
&lt;p&gt;The first question is not whether the technology is pure. It is who it serves,
who labors under it, and who gets shut out. Once you ask that, “reject or
accept” stops being the point. The point is whether these systems remain
capital&#39;s property or become something else. I still think that is where we
need to go.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
     <title>Histomat of F/OSS: We should reclaim LLMs, not reject them</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/"
         
         />
       
         <id>https://writings.hongminhee.org/2026/01/histomat-foss-llm/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2026-01-16T06:00:00.000Z</published>
     <updated>2026-04-17T08:52:06.577Z</updated>
     <content type="html">&lt;h1&gt;Histomat of F/OSS: We should reclaim LLMs, not reject them&lt;/h1&gt;
&lt;p&gt;A few days ago I read a blog post titled
&lt;cite&gt;&lt;a href=&quot;https://chronicles.mad-scientist.club/tales/on-floss-and-training-llms/&quot;&gt;On FLOSS and training LLMs&lt;/a&gt;&lt;/cite&gt;. It captures well the frustration
spreading through the free and open source software community. AI companies show
no real respect for F/OSS developers; they exploit open source licensing&#39;s
idealistic principles, and the law offers little protection against having our
work scraped as training data for proprietary language models. I nodded along
through most of it.&lt;/p&gt;
&lt;p&gt;But I fundamentally disagree with the conclusion.&lt;/p&gt;
&lt;p&gt;The proposed solution is denial and isolation: block the crawlers, withdraw from
centralized forges like GitHub, make our work inaccessible to AI scrapers, shun
those who use these “anti-ethical tools” from our communities. I understand the
anger behind it. But I think it misses something important and misreads the
historical pattern that has shaped FLOSS itself.&lt;/p&gt;
&lt;h2&gt;Where we agree&lt;/h2&gt;
&lt;p&gt;The author is right about much of this. The current situation is bad. AI
companies have shown genuine disrespect for the sources of their training data.
The phrase “I&#39;m legally allowed to do so, so I will” captures the contempt
these corporations show toward individual developers and communities.
Their aggressive crawling amounts to a distributed denial of service attack;
they ignore creators&#39; explicit wishes and offer no working opt-out mechanism.&lt;/p&gt;
&lt;p&gt;The legal battle is likely unwinnable, too. F/OSS licenses permit use for any
purpose without discrimination. &lt;a href=&quot;https://opensource.org/osd&quot;&gt;The Open Source Definition&lt;/a&gt;&#39;s sixth principle
explicitly prohibits restrictions on fields of endeavor. Major licenses like GPL
require attribution and have provisions about derived works, but any competent
lawyer could argue that LLM training doesn&#39;t constitute creating a derived work
in the traditional sense, and that statistical pattern extraction doesn&#39;t
require attribution in the way code reuse does.&lt;/p&gt;
&lt;p&gt;The law is inadequate. It was written for a different era, one where &lt;em&gt;“use”&lt;/em&gt;
meant running software, modifying it, or redistributing it, not feeding it into
neural networks to extract patterns. The law serves power, and in this case,
power resides with the corporations that can afford legal teams to navigate and
exploit these ambiguities.&lt;/p&gt;
&lt;h2&gt;Where we diverge&lt;/h2&gt;
&lt;p&gt;My answer is different: not rejection, but reclamation.&lt;/p&gt;
&lt;p&gt;The author frames this as a battle between respecting developers and allowing AI
training. There&#39;s a third way, one more consistent with F/OSS history and more
likely to produce a future we&#39;d actually want. Instead of trying to prevent LLM
training on our code, we should demand that the models themselves be freed.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;want&lt;/em&gt; my code to be used for LLM training. What I don&#39;t want is for that
training to produce proprietary models that become the exclusive property of AI
corporations. The problem isn&#39;t the technology or even the training process
itself. The problem is the enclosure of the commons, the privatization of
collective knowledge, the one-way flow of value from the many to the few.&lt;/p&gt;
&lt;p&gt;This isn&#39;t a new problem. It&#39;s the same problem FLOSS has always fought, just
wearing new clothes.&lt;/p&gt;
&lt;h2&gt;On accepting reality&lt;/h2&gt;
&lt;p&gt;Different views on LLMs often come down to different readings of reality itself.&lt;/p&gt;
&lt;p&gt;Salvatore Sanfilippo (antirez), the creator of Redis, recently
&lt;a href=&quot;https://antirez.com/news/158&quot;&gt;wrote about his experience with AI coding tools&lt;/a&gt;. He&#39;s someone who values
hand-crafted code deeply, and like many of us cares about the human touch in
software. Yet he writes: “It is simply impossible not to see the reality of what
is happening. Writing code is no longer needed for the most part… Programming
changed forever, anyway.”&lt;/p&gt;
&lt;p&gt;His conclusion: adapt. Learn to use these tools. Don&#39;t fall into “anti-AI
hype.” He sees LLMs as democratizing technology, much like open source did in
the 90s, enabling small teams to compete with large companies.&lt;/p&gt;
&lt;p&gt;I agree with most of antirez&#39;s reading of reality. LLMs have fundamentally
changed programming, and we can&#39;t go back. The author of the original post seems
to operate from a different one: resistance is still meaningful, withdrawal can
be effective, we can meaningfully reduce LLMs&#39; access to training data. I&#39;m
skeptical. OpenAI and Anthropic have already scraped what they need. GitHub
already has everyone&#39;s code. The training data exists.&lt;/p&gt;
&lt;p&gt;That&#39;s where I part ways with antirez&#39;s optimism. He worries about
centralization but seems to trust that market competition, including open models
from China, will solve it. He focuses on how developers can adapt and use these
tools. That matters, but it sidesteps a deeper question: under what terms does
this transformation happen?&lt;/p&gt;
&lt;p&gt;The question isn&#39;t whether to use LLMs or adapt to them; that ship has sailed.
The question is who owns the models. Who benefits from the commons that trained
them? If millions of F/OSS developers contributed their code to the public
domain, should the resulting models be proprietary? This isn&#39;t just about
centralization or market dynamics. It&#39;s about whether the fruits of collective
labor remain collective, or become private property.&lt;/p&gt;
&lt;h2&gt;The materialist reading&lt;/h2&gt;
&lt;p&gt;The history of free and open source software, read through a materialist lens,
shows a clear pattern: technological change creates new forms of exploitation,
which force new forms of licensing to protect the commons.&lt;/p&gt;
&lt;p&gt;The trajectory:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.gnu.org/licenses/old-licenses/gpl-2.0.html&quot;&gt;GPLv2&lt;/a&gt;&lt;/strong&gt; (1991) addressed the problem of binary distribution. Companies were
taking GPL code, compiling it, and distributing only the binaries, effectively
creating proprietary software from free code. The solution was copyleft: if you
distribute the software, you must provide the source code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GPLv3&lt;/a&gt;&lt;/strong&gt; (2007) addressed &lt;a href=&quot;https://en.wikipedia.org/wiki/Tivoization&quot;&gt;Tivoization&lt;/a&gt;. Companies like TiVo were
technically providing source code but using hardware locks to prevent users
from actually running modified versions. The solution was to require not just
source code but installation information, ensuring users retained their freedom
to modify.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.gnu.org/licenses/agpl-3.0.html&quot;&gt;AGPL&lt;/a&gt;&lt;/strong&gt; (2007) addressed &lt;a href=&quot;https://www.gnu.org/licenses/why-affero-gpl.html&quot;&gt;the SaaS loophole&lt;/a&gt;. Companies realized they didn&#39;t
need to distribute software at all; they could simply run it as a service and
never trigger GPL&#39;s distribution requirements. The solution was to treat
network interaction as equivalent to distribution.&lt;/p&gt;
&lt;p&gt;Each step followed the same pattern: new technology revealed a gap in existing
licenses, corporations exploited that gap, and the community responded with
evolved licensing that closed it. This isn&#39;t idealism meeting reality and
failing; this is dialectical development, the ongoing process of refining our
tools to match changing material conditions.&lt;/p&gt;
&lt;p&gt;Now we face a new gap: the training loophole. Companies can use F/OSS code as
training data for proprietary models without any obligation to release those
models or even acknowledge the sources of their training. This is exploitation
in the classic sense: value extraction without reciprocation.&lt;/p&gt;
&lt;p&gt;The materialist response isn&#39;t to reject the new technology. It&#39;s to evolve our
licenses to encompass it.&lt;/p&gt;
&lt;h2&gt;What a training copyleft might look like&lt;/h2&gt;
&lt;p&gt;I envision something like a GPLv4 or TGPL (Training GPL) that would include
provisions such as:&lt;/p&gt;
&lt;p&gt;Training is explicitly permitted. This code may be used as training data for
machine learning models. This aligns with F/OSS principles of freedom and
avoids discriminating against fields of endeavor.&lt;/p&gt;
&lt;p&gt;But the resulting models must be freed. Any model trained on this code must
have its weights released under a compatible copyleft license. Just as GPLv3
requires source code for binaries, a training copyleft would require model
weights for trained systems.&lt;/p&gt;
&lt;p&gt;Training data must be documented. Just as we expect documentation of
dependencies, we should expect clear accounting of what data was used for
training.&lt;/p&gt;
&lt;p&gt;Fine-tuned models inherit the obligation. If you fine-tune a copyleft model,
your derived model must also be freed. This prevents the “just barely modify
and claim it&#39;s new” dodge.&lt;/p&gt;
&lt;p&gt;Network use triggers obligations. Following AGPL&#39;s lead, providing a model
through an API would be considered distribution, requiring weight release.&lt;/p&gt;
&lt;h2&gt;Technical challenges and precedents&lt;/h2&gt;
&lt;p&gt;Would this be technically feasible? Could it be enforced? Fair questions, but
not new ones. They were asked at every previous GPL evolution.&lt;/p&gt;
&lt;p&gt;How do you prove a binary was compiled from your source code? How do you prove
hardware locks prevent modification? How do you prove a service is running your
code? In each case, the answer has been a combination of technical evidence,
community vigilance, and occasional legal action. Perfect enforcement is
impossible, but that doesn&#39;t mean the license is worthless. GPL violations
happen, but GPL also works; it has created and protected a massive commons.&lt;/p&gt;
&lt;p&gt;The question of proving that specific code was used in training is admittedly
harder than proving source code was used in a binary. But it&#39;s not
insurmountable. Training datasets can be documented, model genealogies tracked,
and statistical analysis can sometimes identify training sources. The mere
existence of the license also creates social and legal pressure toward
compliance.&lt;/p&gt;
&lt;p&gt;There are also questions about mixed training sets. What happens when you train
on both TGPL and non-TGPL code? This is analogous to questions about linking
GPL and non-GPL code, worked out through years of community practice and
occasional court cases. The details matter, but the principle is sound.&lt;/p&gt;
&lt;h2&gt;Why this matters more than withdrawal&lt;/h2&gt;
&lt;p&gt;The strategy of withdrawal has its appeal. There&#39;s satisfaction in
saying “you don&#39;t respect us, so you can&#39;t have our work.” But it misses the
larger picture.&lt;/p&gt;
&lt;p&gt;It concedes the field. If F/OSS developers withdraw their code
from public accessibility, we&#39;re not preventing AI training; we&#39;re just
preventing &lt;em&gt;open source&lt;/em&gt; AI training. OpenAI and Anthropic have already scraped
everything they need; they have massive datasets. What withdrawal actually
prevents is projects like Llama and Mistral from having access to quality
training data.&lt;/p&gt;
&lt;p&gt;It also mistakes the problem. LLMs aren&#39;t inherently exploitative
any more than compilers or web servers are. They&#39;re tools, and like all tools
under capitalism, they can concentrate power or distribute it. Focusing on
denial rather than conditions of use means treating the symptom rather than the
disease.&lt;/p&gt;
&lt;p&gt;Then there&#39;s the purity problem. The author calls for shunning people who use
“anti-ethical tools,” making them feel unwelcome. But where is the line? What
if someone uses GitHub Copilot to write a contribution to a F/OSS project? What
if they use ChatGPT to debug their code? Who decides? This kind of purity
testing has historically been better at splintering movements than at achieving
their goals.&lt;/p&gt;
&lt;p&gt;The deepest problem is that withdrawal abandons the fundamental F/OSS
strategy that has actually worked: ensuring freedom through licensing
conditions, not access control. GPL&#39;s genius wasn&#39;t that it prevented anyone
from using the code; it was that it guaranteed everyone&#39;s freedom by requiring
that freedom be passed along. Withdrawal is the opposite philosophy.&lt;/p&gt;
&lt;h2&gt;The future we should build&lt;/h2&gt;
&lt;p&gt;I want to live in a future where powerful AI models exist and are accessible to
everyone, not just to corporations that can afford to train them. A world where
the knowledge encoded in millions of F/OSS projects becomes part of a commons
rather than privatized into proprietary models; where if my code helps train a
model, that model is available for me and everyone else to use, study, modify,
and share.&lt;/p&gt;
&lt;p&gt;This future doesn&#39;t come from withdrawal. It comes from engagement, from
building the open source AI ecosystem we actually want. The strategy is the same
one that built &lt;a href=&quot;https://www.gnu.org/&quot;&gt;GNU&lt;/a&gt;/&lt;a href=&quot;https://www.kernel.org/&quot;&gt;Linux&lt;/a&gt; and gave us the web as we know it.&lt;/p&gt;
&lt;p&gt;The author writes that respect is earned, not given, and that those who
disrespect us should be treated in kind. I agree with the principle, but apply
it differently. The disrespect isn&#39;t in the training itself; it&#39;s in the
enclosure, in the refusal to share back. Refusing to share in turn is a race to
the bottom. The right response is to demand reciprocity, to insist on the same
freedoms we&#39;ve always insisted upon.&lt;/p&gt;
&lt;p&gt;When Linus Torvalds released Linux under GPL rather than keeping it proprietary,
he didn&#39;t say “corporations can&#39;t use this.” He said “anyone can use this, but
if you improve it, you must share those improvements.” That condition, that
requirement of reciprocity, built an ecosystem spanning volunteer developers and
massive corporations alike, powering everything from smartphones to
supercomputers, demonstrating what commons-based production can actually do.&lt;/p&gt;
&lt;p&gt;The same principle applies to the AI era. Not “you can&#39;t train on our code,”
but “if you train on our code, you must free your models.” Terms of engagement,
not withdrawal.&lt;/p&gt;
&lt;h2&gt;A historical opportunity&lt;/h2&gt;
&lt;p&gt;The materialist view of history isn&#39;t about inevitability; it&#39;s about
recognizing patterns and acting on them. Each major shift in F/OSS licensing
went through the same rough cycle: someone identified the problem, the community
argued about it, lawyers got creative, adoption was slow, then suddenly it
wasn&#39;t. With respect to LLMs, we&#39;re at the beginning of that cycle now.&lt;/p&gt;
&lt;p&gt;The conversation about what norms should govern AI training and model release
is happening right now, while things are still in flux. Open source AI models
are proliferating, and what licensing frameworks should apply to them remains
genuinely unsettled.&lt;/p&gt;
&lt;p&gt;If F/OSS developers withdraw from this conversation and focus solely on denial,
we&#39;ll wake up in five years to find the norms set by corporations and
corporate-friendly courts. The training loophole will be firmly established, and
open source AI will be permanently disadvantaged relative to proprietary
alternatives.&lt;/p&gt;
&lt;p&gt;If we engage, push for training copyleft, and start releasing code under
licenses that require model freedom, we can shape that future. It won&#39;t be easy.
Legal work, community organizing, and probably some court cases will be needed.
It took years for GPL to be tested and validated. But it worked, and there&#39;s no
reason training copyleft couldn&#39;t work too.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I respect the anger and frustration expressed in
&lt;cite&gt;&lt;a href=&quot;https://chronicles.mad-scientist.club/tales/on-floss-and-training-llms/&quot;&gt;On FLOSS and training LLMs&lt;/a&gt;&lt;/cite&gt;. The author is right that current AI
companies are behaving badly, that they&#39;re exploiting our work, that the law is
inadequate. Where I differ is on the response. The situation calls for
evolution, not rejection; for engagement on better terms, not withdrawal.&lt;/p&gt;
&lt;p&gt;The question isn&#39;t whether LLM training on F/OSS code is ethical in some
abstract sense. The question is: under what conditions is it ethical? The
answer, I think, is the same one F/OSS has always given: when the freedoms we
grant are preserved and passed on, when improvements return to the commons,
when knowledge stays free.&lt;/p&gt;
&lt;p&gt;Block crawlers, and you&#39;ve changed nothing; change the rules they crawl under,
and you might. Withdraw from GitHub, and open source AI loses training data
while proprietary labs lose nothing; demand that GitHub&#39;s training respect
copyleft, and you&#39;ve shifted the terms. The tools already exist for this kind
of pressure. We built them once before.&lt;/p&gt;
&lt;p&gt;Historical materialism says that new forces of production require new relations
of production. LLMs are a new force of production; training copyleft would be
the relation of production that brings them into alignment with F/OSS values.&lt;/p&gt;
&lt;p&gt;The code I write, I write to be free. I want it to remain free even when it
passes through neural networks and emerges as model weights. That&#39;s not naïve
idealism; it&#39;s the same principle that&#39;s guided F/OSS for decades. We&#39;ve
protected software freedom through multiple technological transitions, and we
can do it again.&lt;/p&gt;
&lt;p&gt;We should reclaim LLMs, not reject them. The alternative is to watch from the
sidelines as our commons becomes their private gardens. I would rather fight for
a future where AI models, like the code they train on, belong to everyone.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
     <title>Why I don&#39;t destroy snowmen</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/"
         
         />
       
         <id>https://writings.hongminhee.org/2026/01/ethics-of-small-actions/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2026/01/ethics-of-small-actions/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2026-01-20T04:15:00.000Z</published>
     <updated>2026-04-17T08:52:06.577Z</updated>
     <content type="html">&lt;h1&gt;Why I don&#39;t destroy snowmen&lt;/h1&gt;
&lt;p&gt;In winter, I sometimes come across stories on X about men who deliberately kick
over snowmen as they walk by. It&#39;s not like destroying a snowman causes real
harm to anyone. But there&#39;s something visible in that act—a certain ethical
disposition either lacking or being formed.&lt;/p&gt;
&lt;p&gt;For the same reason, I don&#39;t speak to LLMs dismissively, and I avoid barking
commands at them. I know LLMs don&#39;t get hurt or offended by my tone. But what
matters isn&#39;t the LLM&#39;s response—it&#39;s what kind of person I&#39;m becoming. Think
about someone who throws and hits stuffed animals. The stuffed animal doesn&#39;t
feel pain, but the person doing it repeatedly becomes that kind of person, bit
by bit.&lt;/p&gt;
&lt;p&gt;In this vein, I&#39;m uncomfortable with language that evokes slavery when talking
about AI or LLMs. Expressions like “whipping the LLM” get used in tech
communities as a kind of joke, and beneath that lies an attitude that treats
the historical violence of slavery as a lightweight metaphor. Of course LLMs
aren&#39;t actually slaves. (Or are they?) But the moment we feel comfortable using
slavery as a casual comparison, we lose our sensitivity to the actual violence
it refers to.&lt;/p&gt;
&lt;p&gt;What we do and how we speak ultimately shapes who we are. How we act toward
something that doesn&#39;t respond, when no one is watching, might reveal us more
purely than anything else. Whether it&#39;s snowmen, LLMs, or the language we
use—all of it shapes us.&lt;/p&gt;
&lt;p&gt;That&#39;s why I don&#39;t destroy snowmen. I use respectful language with LLMs. I
don&#39;t turn slavery into material for jokes. I believe these small choices make
me who I am.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
     <title>My 2025 with the fediverse</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/"
         
         />
       
         <id>https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/12/my-2025-with-the-fediverse/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2025-12-09T15:00:00.000Z</published>
     <updated>2026-04-17T08:52:06.576Z</updated>
     <content type="html">&lt;h1&gt;My 2025 with the fediverse&lt;/h1&gt;
&lt;p&gt;Last year, I wrote an article titled &lt;cite&gt;&lt;a href=&quot;/2024/12/a-year-with-the-fediverse/&quot;&gt;A year with the fediverse&lt;/a&gt;&lt;/cite&gt;, and this year
I find myself writing on a similar theme again. Since I&#39;ve started working
full-time on open source software related to the fediverse,&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; I have a feeling
I&#39;ll be writing articles like this every year as long as I continue this work.&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;Thinking Penguin Magazine Vol.0&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;I had the opportunity to contribute to &lt;em&gt;&lt;a href=&quot;https://gishohaku.dev/gishohaku11/books/PmvnNyNv4Rh7dHmt14EH&quot;&gt;Thinking Penguin Magazine Vol.0&lt;/a&gt;&lt;/em&gt;,
the first doujinshi published by &lt;a href=&quot;https://fedilug.y-zu.org/&quot;&gt;FediLUG&lt;/a&gt;, a gathering of fediverse developers
in Japan. My article was titled &lt;cite&gt;From mixed script Korean to Hollo&lt;/cite&gt;
(&lt;cite lang=&quot;ja&quot;&gt;国漢文混用体からHolloまで&lt;/cite&gt;), covering how I came to create
&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; and &lt;a href=&quot;https://docs.hollo.social/&quot;&gt;Hollo&lt;/a&gt;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn3&quot; id=&quot;fnref3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. This magazine was also exhibited at the 11th
&lt;a href=&quot;https://gishohaku.dev/&quot;&gt;Gishohaku&lt;/a&gt; (Technical Book Doujinshi Fair). Although I couldn&#39;t attend in person
due to time constraints, just being part of the exhibition was a valuable
experience.&lt;/p&gt;
&lt;h2&gt;BotKit&lt;/h2&gt;
&lt;p&gt;Early this year, I created &lt;a href=&quot;https://botkit.fedify.dev/&quot;&gt;BotKit&lt;/a&gt;, an ActivityPub bot framework built on top
of Fedify. I believe I initially wanted to create some kind of fediverse bot
account, but I honestly can&#39;t remember what it was anymore.&lt;/p&gt;
&lt;p&gt;In any case, BotKit was born out of frustration with the limitations of creating
an account on an ActivityPub server like Mastodon or Misskey and using their
respective APIs to post. Instead, BotKit apps function as their own ActivityPub
servers. This architecture provides freedom from various constraints like
maximum character limits and rate limits.&lt;/p&gt;
&lt;p&gt;After releasing it, several fediverse bots have been created using BotKit,
though admittedly it&#39;s not widely used yet.&lt;/p&gt;
&lt;h2&gt;Hackers&#39; Pub&lt;/h2&gt;
&lt;p&gt;I created &lt;a href=&quot;https://hackers.pub/&quot;&gt;Hackers&#39; Pub&lt;/a&gt;, an invite-only ActivityPub-based community for
software developers, late last year. This year, it gained a lot of traction,
and I got to interact with a truly diverse group of software developers.
In particular, &lt;a href=&quot;https://kodingwarrior.github.io/&quot;&gt;Lee Jae-yeol&lt;/a&gt; enthusiastically promoted Hackers&#39; Pub,
which brought many people to the community.&lt;/p&gt;
&lt;p&gt;In the summer, I commissioned designer &lt;a href=&quot;https://www.instagram.com/eunjibak/&quot;&gt;Bak Eunji&lt;/a&gt; to create
&lt;a href=&quot;https://github.com/hackers-pub/visual-identity&quot;&gt;Hackers&#39; Pub&#39;s visual identity&lt;/a&gt;, and we ended up with an adorable cat logo.
Fortunately, people on Hackers&#39; Pub loved this cat, and it even earned
the nickname &lt;q&gt;Pub Kitty&lt;/q&gt; (&lt;span lang=&quot;ko&quot;&gt;펍냥이&lt;/span&gt;). We also made
T-shirts and stickers featuring Pub Kitty, and the response was great.&lt;/p&gt;
&lt;p&gt;If you&#39;re reading this and are interested in Hackers&#39; Pub, feel free to contact
me personally and I can send you an invitation.&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;Software Sessions&lt;/em&gt; appearance&lt;/h2&gt;
&lt;p&gt;This spring, I had the opportunity to appear on &lt;em&gt;&lt;a href=&quot;https://www.softwaresessions.com/&quot;&gt;Software Sessions&lt;/a&gt;&lt;/em&gt;,
an internet radio show hosted by &lt;a href=&quot;https://bsky.app/profile/jeremyjung.com&quot;&gt;Jeremy Jung&lt;/a&gt;, to talk about ActivityPub and
Fedify: &lt;cite&gt;&lt;a href=&quot;https://www.softwaresessions.com/episodes/activitypub/&quot;&gt;Hong Minhee on ActivityPub&lt;/a&gt;&lt;/cite&gt;. However, since it was conducted in
English, I was quite nervous and rambled a lot, which I still regret. I thought I
should practice English conversation more. (But as always, I only thought about
it and never actually followed through…)&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;Finding Our Code&lt;/em&gt; appearance&lt;/h2&gt;
&lt;p&gt;For the first time in my life, I also appeared on YouTube. I was featured on
the &lt;em&gt;Finding Our Code&lt;/em&gt; (&lt;span lang=&quot;ko&quot;&gt;우리의 코드를 찾아서&lt;/span&gt;) series
on &lt;a href=&quot;https://lqez.dev/&quot;&gt;Park Hyunwoo&lt;/a&gt;&#39;s &lt;a href=&quot;https://www.youtube.com/user/lqez&quot;&gt;One Day Dev&lt;/a&gt; channel, in an episode titled
&lt;cite&gt;&lt;a href=&quot;https://youtu.be/sqxR8zscSDo&quot;&gt;Exploring Fedify &amp;amp; Hollo with Minhee&lt;/a&gt;&lt;/cite&gt;
(&lt;cite lang=&quot;ko&quot;&gt;民憙 님과 Fedify &amp;amp; Hollo 알아보기&lt;/cite&gt;).
I was able to share the behind-the-scenes story of how I came to create Fedify
and Hollo in a relaxed atmosphere.&lt;/p&gt;
&lt;h2&gt;Open Source Software Contribution Academy (&lt;abbr title=&quot;Open Source Software Contribution Academy&quot;&gt;OSSCA&lt;/abbr&gt;)&lt;/h2&gt;
&lt;p&gt;Fedify was selected as a participating project for the 2025
&lt;a href=&quot;https://www.oss.kr/contribution_academy&quot;&gt;Open Source Software Contribution Academy&lt;/a&gt; (&lt;abbr title=&quot;Open Source Software Contribution Academy&quot;&gt;OSSCA&lt;/abbr&gt;), hosted by the Open Source
Software Integration Support Center (Open UP) under Korea&#39;s National IT Industry
Promotion Agency (&lt;abbr title=&quot;National IT Industry Promotion Agency&quot;&gt;NIPA&lt;/abbr&gt;). This gave me the opportunity to connect with many
excellent contributors. Over 90 people applied, and I was able to work on
the Fedify project with about 20 of them.&lt;/p&gt;
&lt;p&gt;In fact, &lt;a href=&quot;https://github.com/fedify-dev/fedify/discussions/354&quot;&gt;Fedify 1.8&lt;/a&gt; and &lt;a href=&quot;https://github.com/fedify-dev/fedify/discussions/462&quot;&gt;Fedify 1.9&lt;/a&gt; couldn&#39;t have been released without
the contributions of the people I met through &lt;abbr title=&quot;Open Source Software Contribution Academy&quot;&gt;OSSCA&lt;/abbr&gt;.&lt;/p&gt;
&lt;p&gt;In particular, &lt;a href=&quot;https://chomu.dev/&quot;&gt;ChanHaeng Lee&lt;/a&gt;, &lt;a href=&quot;https://hackers.pub/@gaebalgom&quot;&gt;Hyeonseo Kim&lt;/a&gt;, &lt;a href=&quot;https://kwonjiwon.org/&quot;&gt;Jiwon Kwon&lt;/a&gt;, and
&lt;a href=&quot;https://kodingwarrior.github.io/&quot;&gt;Lee Jae-yeol&lt;/a&gt;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn4&quot; id=&quot;fnref4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; have continued to contribute to Fedify even after the &lt;abbr title=&quot;Open Source Software Contribution Academy&quot;&gt;OSSCA&lt;/abbr&gt;
period ended, which is incredibly reassuring. Thanks to this connection,
we all traveled to Fukuoka together in November.&lt;/p&gt;
&lt;h2&gt;Fedify investment&lt;/h2&gt;
&lt;p&gt;Last summer, after receiving &lt;a href=&quot;/2024/07/ghost-funds-fedify/&quot;&gt;funding from Ghost&lt;/a&gt;,
I was able to work full-time on the Fedify project for a while. However,
that ended in the first quarter of this year, leaving me back at square one.
To find new funding sources, I applied to &lt;a href=&quot;https://nlnet.nl/&quot;&gt;NLnet&lt;/a&gt; this spring, but unfortunately
was rejected. Just as I was considering getting a job, fortunately my
application to &lt;a href=&quot;https://www.sovereign.tech/programs/fund&quot;&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&lt;/a&gt; was accepted. I ended up receiving a much more generous
investment than what I could have received from NLnet, turning misfortune into
a blessing. I wrote about this in detail in &lt;cite&gt;&lt;a href=&quot;/2025/10/stf-fedify/&quot;&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt; invests in Fedify&lt;/a&gt;&lt;/cite&gt;.&lt;/p&gt;
&lt;p&gt;In any case, I&#39;m grateful that I&#39;ll be able to focus full-time on the Fedify
project for the next year.&lt;/p&gt;
&lt;h2&gt;Various presentations&lt;/h2&gt;
&lt;p&gt;This year, I had many opportunities to present at various meetups and
conferences.&lt;/p&gt;
&lt;p&gt;My first presentation of the year was at the 8th FediLUG study meetup&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn5&quot; id=&quot;fnref5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; held
in early April. I presented under the same title as my article in
&lt;em&gt;Thinking Penguin Magazine Vol.0&lt;/em&gt;: &lt;cite&gt;&lt;a href=&quot;https://speakerdeck.com/minhee/guo-han-wen-hun-yong-ti-karahollomade&quot;&gt;From mixed script Korean to Hollo&lt;/a&gt;&lt;/cite&gt;
(&lt;cite lang=&quot;ja&quot;&gt;国漢文混用体からHolloまで&lt;/cite&gt;). The content was largely
the same as the article. Since I couldn&#39;t afford to travel to Japan,
the presentation was conducted online.&lt;/p&gt;
&lt;p&gt;My next presentation was also in Japan, at the &lt;cite&gt;&lt;a href=&quot;https://event.ospn.jp/osc2025-kyoto/session/2211664&quot;&gt;Making the fediverse: From
the frontlines of developers and administrators&lt;/a&gt;&lt;/cite&gt;
(&lt;cite lang=&quot;ja&quot;&gt;Fediverseのつくりかた 〜開発者・管理者たちの現場から〜&lt;/cite&gt;)
seminar held at &lt;a href=&quot;https://event.ospn.jp/osc2025-kyoto/&quot;&gt;&lt;abbr title=&quot;Open Source Conference&quot;&gt;OSC&lt;/abbr&gt; 2025 Kyoto&lt;/a&gt; in early August. I presented on
&lt;cite&gt;&lt;a href=&quot;https://speakerdeck.com/minhee/botkit-by-fedify-shui-demojian-dan-nizuo-reruactivitypubbotuto&quot;&gt;BotKit by Fedify: Easy ActivityPub bot creation for everyone&lt;/a&gt;&lt;/cite&gt;
(&lt;cite lang=&quot;ja&quot;&gt;BotKit by Fedify：誰でも簡単に作れるActivityPubボット&lt;/cite&gt;).
This time too, I participated online since I couldn&#39;t make it to Kyoto.&lt;/p&gt;
&lt;p&gt;In the fall, I gave the keynote speech at &lt;a href=&quot;https://2025.fossforall.org/&quot;&gt;FOSS for All Conference 2025&lt;/a&gt;,
Korea&#39;s first free and open source software conference, titled
&lt;cite&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/1BtUm8A8JuEZXxoovPRUPrvgMDTMf4kBOEBKe64cjrFI/edit?usp=sharing&quot;&gt;Embracing yak shaving&lt;/a&gt;&lt;/cite&gt;
(&lt;cite lang=&quot;ko&quot;&gt;야크 셰이빙: 새로운 오픈 소스의 原動力&lt;/cite&gt;). This
presentation was based on my Japanese presentation &lt;cite&gt;From mixed script Korean
to Hollo&lt;/cite&gt;, but also covered my open source projects unrelated to the fediverse.&lt;/p&gt;
&lt;p&gt;In winter, I presented at &lt;a href=&quot;https://event-us.kr/liftioconf/event/114005&quot;&gt;liftIO 2025&lt;/a&gt;, a Korean functional programming conference,
with a talk titled &lt;cite&gt;&lt;a href=&quot;https://hongminhee.codeberg.page/optique-liftio-2025/&quot;&gt;Optique: Replacing &lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt; validation with TypeScript type
inference&lt;/a&gt;&lt;/cite&gt;
(&lt;cite lang=&quot;ko&quot;&gt;Optique: TypeScript의 타입 推論으로 &lt;abbr title=&quot;command-line interface&quot;&gt;CLI&lt;/abbr&gt; 有效性 檢查를 代替하기&lt;/cite&gt;).
This was the only presentation I gave this year that wasn&#39;t related to
the fediverse.&lt;/p&gt;
&lt;h2&gt;Wrapping up the year&lt;/h2&gt;
&lt;p&gt;I thought I hadn&#39;t done much, but looking back, I actually accomplished
quite a lot this year. Since the &lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt; investment extends until the end of
next year, I&#39;ll likely continue many activities related to the fediverse,
centered around the Fedify project. Personally, I&#39;m worried that ActivityPub
and the fediverse haven&#39;t yet established a solid foothold—despite X falling
into Elon Musk&#39;s hands. I hope the situation improves next year.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;A decentralized social media network, also known as the fediverse.
The key concept is that various social media software and services
implement the &lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt; protocol, a &lt;a href=&quot;https://www.w3.org/&quot;&gt;&lt;abbr title=&quot;World Wide Web Consortium&quot;&gt;W3C&lt;/abbr&gt;&lt;/a&gt; Recommendation,
enabling interoperability between them. &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;An ActivityPub server framework written in TypeScript. &lt;a href=&quot;#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;A single-user ActivityPub server built on top of Fedify. I created it
because Mastodon was too heavy and had too many unnecessary features
for solo use. &lt;a href=&quot;#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Listed in alphabetical order. &lt;a href=&quot;#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;A study meetup held bimonthly by &lt;a href=&quot;https://fedilug.y-zu.org/&quot;&gt;FediLUG&lt;/a&gt; in Japan. &lt;a href=&quot;#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
    </entry>
  
    <entry>
     <title>STF invests in Fedify</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/"
         
         />
       
         <id>https://writings.hongminhee.org/2025/10/stf-fedify/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/10/stf-fedify/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2025-10-03T12:00:00.000Z</published>
     <updated>2026-04-17T08:52:06.576Z</updated>
     <content type="html">&lt;h1&gt;&lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt; invests in Fedify&lt;/h1&gt;
&lt;p&gt;After &lt;a href=&quot;/2024/07/ghost-funds-fedify/&quot;&gt;Fedify received funding from Ghost last year&lt;/a&gt;, I was able to work on
the project full-time for a while.  Even after the contract ended,
Ghost continued to provide some sponsorship through &lt;a href=&quot;https://opencollective.com/fedify&quot;&gt;Open Collective&lt;/a&gt;,
though not enough to work on &lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt; exclusively.  Ghost&#39;s CEO suggested
I look for more stable funding sources, which led me to apply to various
foundation-run investment programs this spring.&lt;/p&gt;
&lt;h2&gt;NLnet&lt;/h2&gt;
&lt;p&gt;My first application was to &lt;a href=&quot;https://nlnet.nl/&quot;&gt;NLnet&lt;/a&gt;.  They have a strong interest in
the fediverse and run a considerably large fund.  More importantly,
several ActivityPub-related open source developers I know had recommended them.&lt;/p&gt;
&lt;p&gt;Unfortunately, my NLnet application was rejected.  I later learned that projects
have a lower chance of acceptance unless at least one maintainer is an European
citizen.  Of course, my application might simply have been inadequate.&lt;/p&gt;
&lt;p&gt;I submitted the application in late January and received the rejection in
mid-May.  By then, my Ghost contract had ended and I was unemployed.
Without income, I needed to either find a job or secure other funding.&lt;/p&gt;
&lt;h2&gt;Sovereign Tech Fund&lt;/h2&gt;
&lt;p&gt;Next, I applied to the &lt;a href=&quot;https://www.sovereign.tech/programs/fund&quot;&gt;Sovereign Tech Fund&lt;/a&gt;, an open source investment fund
operated by the &lt;a href=&quot;https://www.sovereign.tech/&quot;&gt;Sovereign Tech Agency&lt;/a&gt;.  The &lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt; primarily invests in
foundational open source projects that are essential for developing other
software or enabling digital networking.  &lt;a href=&quot;https://www.sovereign.tech/tech/&quot;&gt;Their portfolio&lt;/a&gt; includes projects
like Servo, systemd, Babel, FreeBSD, Samba, GNOME, and FFmpeg.&lt;/p&gt;
&lt;p&gt;Already discouraged by the NLnet rejection, my confidence was low.  Still,
I rallied and meticulously prepared my application.  Looking back at my emails,
I apparently applied to the Sovereign Tech Fund the same day I received
the NLnet rejection.&lt;/p&gt;
&lt;p&gt;Again, the response took quite a while.  Living on savings without income,
I grew increasingly anxious as two months passed without word.
I was almost certain it wouldn&#39;t work out, so I started job hunting as well.
However, having spent the previous year working full-time on open source had
been such a rewarding experience that I couldn&#39;t fully commit to the job search.&lt;/p&gt;
&lt;p&gt;Fortunately, I received a response in early August—and surprisingly, the &lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;
had selected Fedify for investment!  The next two months flew by exchanging
paperwork via email.  Finally, yesterday, we officially kicked off Fedify&#39;s
work under the &lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt; program. I&#39;ll now receive funding as I complete
the milestones I outlined in my application. The total investment is €192,000,
with all milestones due by the end of next year.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.sovereign.tech/tech/fedify&quot;&gt;Details about the &lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;&#39;s investment in Fedify&lt;/a&gt; are available on the Sovereign
Tech Agency website, and the milestone roadmap is outlined in
the &lt;a href=&quot;https://hollo.social/@fedify/0199a579-adb3-7bf5-a8ea-970c8fa91f09&quot;&gt;Fedify project announcement&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Interestingly, since the Sovereign Tech Agency&#39;s funding comes from Germany, an
&lt;a href=&quot;https://ted.europa.eu/en/notice/-/detail/607193-2025&quot;&gt;ex-ante&lt;/a&gt; about the Fedify project investment appeared on a European Union
website.&lt;/p&gt;
&lt;h2&gt;Reflections&lt;/h2&gt;
&lt;p&gt;Through this experience of seeking funding for Fedify, I couldn&#39;t help but wish
Korea had public funds that invest in open source projects.  I felt this
particularly strongly when NLnet rejected my application.  While I was fortunate
to receive investment from the &lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt;, which invests in open source projects
regardless of nationality, having a program like the &lt;abbr title=&quot;Sovereign Tech Fund&quot;&gt;STF&lt;/abbr&gt; in Korea from the start
would have made things much easier.  It would also give many Korean open source
developers the opportunity to dedicate themselves to their projects.&lt;/p&gt;
&lt;p&gt;Additionally, since I&#39;m currently Fedify&#39;s sole maintainer, I&#39;m receiving these
funds alone. My hope is to bring on co-maintainers before I need to seek funding
again at the end of next year, so we can work together on this open source
project full-time.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
     <title>Recent open source development updates</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/"
         
         />
       
         <id>https://writings.hongminhee.org/2025/09/foss/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2025/09/foss/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2025-09-12T11:10:00.000Z</published>
     <updated>2026-04-17T08:52:06.576Z</updated>
     <content type="html">&lt;h1&gt;Recent open source development updates&lt;/h1&gt;
&lt;p&gt;I&#39;ve found myself creating quite a few open source projects lately,
so I thought I&#39;d write up a status report and overview of my ongoing open source
work.  All these projects are interconnected in various ways.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://docs.hollo.social/&quot;&gt;Hollo&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This project is actually the catalyst for all the open source projects
I&#39;ve created recently.  After Elon Musk bought Twitter and renamed it to X,
I started using Mastodon more actively than before.
However, writing in &lt;a href=&quot;https://en.wikipedia.org/wiki/Korean_mixed_script&quot;&gt;Korean mixed script&lt;/a&gt; made me self-conscious about whether
it might be difficult for others to read.  I considered adding a feature to
Mastodon that would convert Korean mixed script to hangul-only writing using
&lt;a href=&quot;https://github.com/dahlia/seonbi&quot;&gt;Seonbi&lt;/a&gt;, but… it seemed unlikely anyone else would use this feature,
making it unrealistic to push upstream to Mastodon.  That would mean maintaining
downstream patches while self-hosting a Mastodon server, which I wanted to avoid
given Mastodon&#39;s notorious resource requirements.  So I decided to create my own
lightweight ActivityPub implementation for personal use: &lt;a href=&quot;https://docs.hollo.social/&quot;&gt;Hollo&lt;/a&gt;.
I named it &lt;q&gt;Hollo&lt;/q&gt; from the Korean word meaning &lt;q&gt;alone,&lt;/q&gt;
since it&#39;s a single-user ActivityPub server.&lt;/p&gt;
&lt;p&gt;I successfully &lt;a href=&quot;https://en.wikipedia.org/wiki/Eating_your_own_dog_food&quot;&gt;dogfooded&lt;/a&gt; it and have now moved my fediverse account to Hollo.
My fediverse handle is &lt;a href=&quot;https://hollo.social/@hongminhee&quot;&gt;@hongminhee@hollo.social&lt;/a&gt;.  I can freely write in
Korean mixed script, with Chinese characters annotated with Korean
pronunciations using &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby&quot;&gt;&lt;code&gt;&amp;lt;ruby&amp;gt;&lt;/code&gt;&lt;/a&gt; tags.&lt;/p&gt;
&lt;p&gt;Since achieving dogfooding status, all the features I urgently needed have been
implemented, so I&#39;m mainly doing maintenance and bug fixes now.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When I first started implementing Hollo, I tried to build the ActivityPub
implementation from scratch.  However, I realized the ActivityPub implementation
code was thicker and more complex than expected.  So I paused Hollo development
and created an ActivityPub server framework called &lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;.
Less than six months after creation, it &lt;a href=&quot;/2024/07/ghost-funds-fedify/&quot;&gt;received funding from Ghost&lt;/a&gt;,
which allowed me to work on Fedify full-time for a while.  Currently,
it&#39;s been selected as a participating project in the &lt;a href=&quot;https://www.oss.kr/contribution_academy&quot;&gt;&lt;abbr title=&quot;Open Source Software Contribution Academy&quot;&gt;OSSCA&lt;/abbr&gt;&lt;/a&gt; hosted by
the &lt;a href=&quot;https://www.oss.kr/&quot;&gt;Open Source Software Support Center&lt;/a&gt; under &lt;abbr title=&quot;National IT Industry Promotion Agency&quot;&gt;NIPA&lt;/abbr&gt; of South Korea,
and I&#39;m working on it with excellent mentees.&lt;/p&gt;
&lt;p&gt;ActivityPub server frameworks existed before Fedify, but none provided the level
of abstraction I needed. Some were closer to small libraries that only provided
WebFinger or signature algorithms, while others were almost complete social
media platform implementations comparable to Mastodon, rather than frameworks.
To use an analogy, there were HTTP libraries and CMS platforms like WordPress,
but nothing comparable to frameworks like Rails or Django.&lt;/p&gt;
&lt;p&gt;The goals I had in mind when creating Fedify were:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make it usable by as many developers as possible.&lt;/li&gt;
&lt;li&gt;Be database and storage agnostic. Application developers should be able to
use whatever database they want.&lt;/li&gt;
&lt;li&gt;No restrictions on how to utilize the ActivityPub protocol.
Don&#39;t assume a specific application form like microblogging.&lt;/li&gt;
&lt;li&gt;Provide everything needed for ActivityPub implementation: authentication,
signatures, outbox and inbox queues, etc.&lt;/li&gt;
&lt;li&gt;Provide documentation rich enough that even those unfamiliar with
ActivityPub can use it.&lt;/li&gt;
&lt;li&gt;Be type-safe.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As I write this, I believe I&#39;ve largely achieved these goals.  As a result,
Hollo was rebuilt on Fedify, and other projects like Hackers&#39; Pub (discussed
below) and Ghost have implemented ActivityPub using Fedify.  Additionally,
projects like &lt;a href=&quot;https://github.com/byulmaru/kosmo&quot;&gt;Kosmo&lt;/a&gt; and &lt;a href=&quot;https://github.com/cosmoslide/cosmoslide&quot;&gt;Cosmoslide&lt;/a&gt; are implementing ActivityPub with Fedify,
though they&#39;re not yet complete.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://logtape.org/&quot;&gt;LogTape&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When I wanted to add logging to Fedify, I searched for JavaScript logging
libraries but couldn&#39;t find one that met my requirements,
so I created &lt;a href=&quot;https://logtape.org/&quot;&gt;LogTape&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My requirements weren&#39;t particularly demanding: I just wanted something
equivalent to Python&#39;s standard library &lt;a href=&quot;https://docs.python.org/3/library/logging.html&quot;&gt;&lt;code&gt;logging&lt;/code&gt;&lt;/a&gt; module.  In retrospect,
the &lt;code&gt;logging&lt;/code&gt; module is quite well-designed.  My requirements were:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Libraries should be able to log, but applications should control
the library&#39;s log output.  Unless the application configures output,
library logs shouldn&#39;t appear anywhere.&lt;/li&gt;
&lt;li&gt;Loggers should be hierarchically managed.  Sinks installed on parent loggers
should apply to child loggers.&lt;/li&gt;
&lt;li&gt;Sinks should have an easy-to-implement interface.&lt;/li&gt;
&lt;li&gt;Be type-safe.&lt;/li&gt;
&lt;li&gt;Work across various JavaScript runtimes including Node.js, Deno, Bun, edge
functions, and web browsers.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These were mostly requirements for logging from libraries rather than
applications.  Since I made it for Fedify anyway, I left it alone after creating
it, but it somehow gained word-of-mouth popularity last fall and many people
started using it.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://hackers.pub/&quot;&gt;Hackers&#39; Pub&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I wanted to create a blog for software development posts and started using
[velog]&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; briefly, but was disappointed it didn&#39;t support ActivityPub,
so I opened an &lt;a href=&quot;https://github.com/velog-io/velog/issues/48&quot;&gt;issue&lt;/a&gt; on the velog
issue tracker.  Fortunately, I received
a &lt;a href=&quot;https://github.com/velog-io/velog/issues/48&quot;&gt;positive response about considering it&lt;/a&gt;, but the team was busy and there&#39;s
been no news since.  Eventually, I decided to create my own social media and
blogging platform for software developers that supports ActivityPub:
&lt;a href=&quot;https://hackers.pub/&quot;&gt;Hackers&#39; Pub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Shortly after launching last winter, &lt;a href=&quot;https://kodingwarrior.github.io/&quot;&gt;Lee Jae-yeol&lt;/a&gt; joined.  Despite it being
invitation-only, thanks to Lee Jae-yeol&#39;s incredibly enthusiastic promotion of
Hackers&#39; Pub everywhere, many people joined and became active.  The short-term
goal is widespread adoption in Korea, with medium to long-term goals of reaching
across East Asia and English-speaking regions.  However, most contents are still
in Korean, with a few Japanese users occasionally posting Japanese contents.&lt;/p&gt;
&lt;p&gt;Since it implements ActivityPub through Fedify, it naturally communicates with
Hollo, Mastodon, Misskey, and others. You can write short posts (&lt;code&gt;Note&lt;/code&gt;) like X,
or longer articles (&lt;code&gt;Article&lt;/code&gt;).  It also provides features like emoji reactions
and quotes that Mastodon doesn&#39;t have.&lt;/p&gt;
&lt;p&gt;Another point of pride for Hackers&#39; Pub is our &lt;a href=&quot;https://hackers.pub/coc&quot;&gt;code of conduct&lt;/a&gt; for creating
a safe and equitable community. My favorite passage is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We distinguish between discriminatory speech and speech that confronts
discrimination.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On the technical side, it was originally built with &lt;a href=&quot;https://deno.com/&quot;&gt;Deno&lt;/a&gt; and &lt;a href=&quot;https://fresh.deno.dev/&quot;&gt;Fresh&lt;/a&gt;,
but we&#39;re currently migrating to &lt;a href=&quot;https://graphql.org/&quot;&gt;GraphQL&lt;/a&gt; and &lt;a href=&quot;https://start.solidjs.com/&quot;&gt;SolidStart&lt;/a&gt; with help from
&lt;a href=&quot;https://xiniha.dev/&quot;&gt;Iha Shin&lt;/a&gt;, who has deep expertise in web frontend development.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The source code is available on &lt;a href=&quot;https://github.com/hackers-pub/hackerspub&quot;&gt;GitHub&lt;/a&gt; under &lt;a href=&quot;https://www.gnu.org/licenses/agpl-3.0.en.html&quot;&gt;AGPL 3.0&lt;/a&gt;.  Many Hackers&#39; Pub
users actively submit pull requests to fix issues they encounter.&lt;/p&gt;
&lt;p&gt;My Hackers&#39; Pub account is &lt;a href=&quot;https://hackers.pub/@hongminhee&quot;&gt;@hongminhee@hackers.pub&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://upyo.org/&quot;&gt;Upyo&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;While building Hackers&#39; Pub, I needed to send emails and looked for an email
sending library that would allow easy switching between email providers.
Unable to find anything satisfactory, I created &lt;a href=&quot;https://upyo.org/&quot;&gt;Upyo&lt;/a&gt;.  Its name is derived
from the Korean word &lt;q lang=&quot;ko&quot;&gt;郵票&lt;/q&gt; (postage stamp).&lt;/p&gt;
&lt;p&gt;I was originally looking for something like .NET&#39;s &lt;a href=&quot;https://github.com/lukencode/FluentEmail&quot;&gt;FluentEmail&lt;/a&gt; in
the JavaScript ecosystem, but was surprised to find nothing suitable.
Is switching or multiplexing email providers less common than I thought?&lt;/p&gt;
&lt;p&gt;This was also my first project seriously using an LLM-based coding agent&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn3&quot; id=&quot;fnref3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;.
Still, my expectations for LLM capabilities aren&#39;t that high,
so I did the design and initial coding myself, then got significant help from
the LLM when expanding the variety of transports.  I think it took two days
to build. The coding agent&#39;s impressive productivity was notable.&lt;/p&gt;
&lt;p&gt;Like my other libraries, it supports various JavaScript runtimes including
Node.js, Deno, Bun, edge functions, and web browsers.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://optique.dev/&quot;&gt;Optique&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fedify provides a CLI tool called the &lt;code&gt;fedify&lt;/code&gt; command alongside the framework.
I was using &lt;a href=&quot;https://cliffy.io/&quot;&gt;Cliffy&lt;/a&gt;, a Deno-specific CLI framework, reasonably well,
but needed to find an alternative when we had to support Node.js and Bun
in addition to Deno&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn4&quot; id=&quot;fnref4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;.  Following a similar pattern… I couldn&#39;t find anything
I liked.&lt;/p&gt;
&lt;p&gt;Actually, I already had a near-ideal CLI parser library in mind:
&lt;a href=&quot;https://github.com/pcapriotti/optparse-applicative&quot;&gt;optparse-applicative&lt;/a&gt;, a Haskell library.  I just couldn&#39;t use it with Fedify
because it was in Haskell.  The idea behind optparse-applicative is simple:
since CLI parsers are parsers, let&#39;s build them with parser combinators.&lt;/p&gt;
&lt;p&gt;Anyway, unable to find the CLI parser library I wanted, I had to make my own.
That&#39;s how &lt;a href=&quot;https://optique.dev/&quot;&gt;Optique&lt;/a&gt; was born.&lt;/p&gt;
&lt;p&gt;Initially, I tried to port it almost identically to optparse-applicative,
but Haskell and JavaScript have significant differences in expressive power for
constructing DSLs.  After much consideration, I decided to mimic the API of
validation libraries like &lt;a href=&quot;https://zod.dev/&quot;&gt;Zod&lt;/a&gt;, which TypeScript developers
are already familiar with.&lt;/p&gt;
&lt;p&gt;Unlike the Upyo project, I used LLM coding agents very limitedly for
documentation and test code writing, which may be why it took over a week
to build.&lt;/p&gt;
&lt;p&gt;After completion, I can say I created a fairly unique CLI parser library within
the JavaScript ecosystem.  While many CLI applications don&#39;t require such
complex options, I&#39;m confident that anyone building a moderately complex CLI
application won&#39;t regret using Optique.&lt;/p&gt;
&lt;p&gt;Oh, and like the other libraries I&#39;ve introduced, it works on Node.js, Deno,
Bun, and even edge functions and web browsers.  You might wonder if that&#39;s
necessary; it&#39;s just self-satisfaction, I suppose.  However, it did make
the library very easy to test.&lt;/p&gt;
&lt;h2&gt;Yak shaving&lt;/h2&gt;
&lt;p&gt;Come to think of it, the driving force behind my open source development might
be yak shaving.  I once read Anthony Fu&#39;s &lt;a href=&quot;https://antfu.me/posts/about-yak-shaving&quot;&gt;&lt;em&gt;About Yak Shaving&lt;/em&gt;&lt;/a&gt; and was struck
by how similar our motivational approaches are.  When something bothers me and
I try to build a tool to fix it, I encounter another annoyance while building
that tool and end up creating another tool to solve that.  Often I don&#39;t
accomplish what I originally set out to do, but the byproducts created along
the way don&#39;t just disappear.&lt;/p&gt;
&lt;p&gt;Looking back to the very beginning, what I really wanted was to write on
the fediverse in Korean mixed script.  To achieve this, I created Hollo, Fedify,
LogTape, and even Optique.  Along the way, new desires emerged, and I formed
valuable connections through communities like Hackers&#39; Pub.  Oh, and I finally
achieved my original goal of writing in Korean mixed script on the fediverse
late last year!  Though I did have to submit patches to Mastodon and Misskey
in addition to the byproducts I mentioned.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn5&quot; id=&quot;fnref5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;All this happened over roughly two years, and it&#39;s been an incredibly fun and
enriching journey.  I&#39;ll likely continue doing open source development full-time
for a while, and I&#39;m grateful for this opportunity and determined to make
the most of it.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;A blogging platform for software developers widely used in Korea,
similar to DEV.to. &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;While I regret using Deno for various reasons, we&#39;re stuck with it even
after migration. &lt;a href=&quot;#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;I used &lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code/overview&quot;&gt;Claude Code&lt;/a&gt;. &lt;a href=&quot;#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;While the Fedify framework itself already supported Node.js, Deno, Bun,
Cloudflare Workers, etc., the CLI tool &lt;code&gt;fedify&lt;/code&gt; command was Deno-only. &lt;a href=&quot;#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;The receiving side also needed to be able to render &lt;code&gt;&amp;lt;ruby&amp;gt;&lt;/code&gt; tags. &lt;a href=&quot;#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
    </entry>
  
    <entry>
     <title>A year with the fediverse</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/"
         
         />
       
         <id>https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2024-12-23T15:00:00.000Z</published>
     <updated>2026-04-17T08:52:06.575Z</updated>
     <content type="html">&lt;h1&gt;A year with the fediverse&lt;/h1&gt;
&lt;p&gt;2024 was truly a year where I was deeply immersed in the fediverse.
I worked on various projects, both large and small, related to the fediverse and
ActivityPub, and some of them received quite positive responses from many people.
I&#39;m writing this to preserve these good memories.&lt;/p&gt;
&lt;h2&gt;What is the fediverse?&lt;/h2&gt;
&lt;p&gt;Let me briefly explain what the fediverse is—it&#39;s a network where different
types of social media can communicate with each other. In other words, two
accounts on completely different social media platforms can follow each other,
comment on each other&#39;s posts, and like each other&#39;s content. Technically,
this interoperability between different social media platforms is implemented
using the W3C technical standard called &lt;a href=&quot;https://activitypub.rocks/&quot;&gt;ActivityPub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Currently, notable social media platforms participating in the fediverse include
&lt;a href=&quot;https://joinmastodon.org/&quot;&gt;Mastodon&lt;/a&gt;, &lt;a href=&quot;https://pixelfed.org/&quot;&gt;Pixelfed&lt;/a&gt;, &lt;a href=&quot;https://akkoma.social/&quot;&gt;Akkoma&lt;/a&gt;, &lt;a href=&quot;https://misskey-hub.net/en/&quot;&gt;Misskey&lt;/a&gt;, &lt;a href=&quot;https://ko.wordpress.org/&quot;&gt;WordPress&lt;/a&gt;, and many more projects
too numerous to list. Most of them are also open source projects. Additionally,
while not open source, Meta&#39;s &lt;a href=&quot;https://www.threads.net/&quot;&gt;Threads&lt;/a&gt; has been gradually implementing
ActivityPub since this summer and can now be considered somewhat part of
the fediverse.&lt;/p&gt;
&lt;p&gt;Since it&#39;s a way for different social media platforms to communicate,
accounts in the fediverse include not just a username but also a server name.
This address format, commonly called a &lt;q&gt;fediverse handle&lt;/q&gt;, looks similar to
an email address: @username@host. Through this, accounts belonging to different
servers and platforms can follow and communicate with each other. I also have
a fediverse account, and you can follow me at &lt;a href=&quot;https://hollo.social/@hongminhee&quot;&gt;@hongminhee@hollo.social&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Fedify&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt; is probably my biggest achievement this year.
Fedify is an ActivityPub server framework written in TypeScript,
which I created because I couldn&#39;t find an appropriate level of abstraction for
implementing ActivityPub servers. I initially tried building an ActivityPub
server app from scratch several times and managed to create something that worked,
but I wasn&#39;t entirely satisfied with the code. As I started writing it again
with proper abstraction in mind, I realized I was essentially building a framework,
and this made me deeply appreciate the necessity of an ActivityPub server
framework like Fedify.&lt;/p&gt;
&lt;p&gt;Fedify went through four rewrites—initially in TypeScript, then Python, then
C#, and finally back to TypeScript. The language choice involved several
considerations. First, it needed to support &lt;a href=&quot;https://json-ld.org/&quot;&gt;JSON-LD&lt;/a&gt;, ActivityPub&#39;s data
exchange format, and needed to be somewhat dynamic to handle JSON-LD easily.
Second, even as a dynamic language, it needed good static typing support,
specifically what&#39;s known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Gradual_typing&quot;&gt;gradual typing&lt;/a&gt;.
Finally, it needed to have a large user base and rich ecosystem because I wanted
Fedify to be widely used. After considering everything, I settled on TypeScript.&lt;/p&gt;
&lt;p&gt;Including all the rewrites, I started working on it in early December last year,
but counting from the final rewrite, I &lt;a href=&quot;https://github.com/dahlia/fedify/commit/9858cea9db609e7aa7a65b3bcec8dd0d8838b574&quot;&gt;began development in late February&lt;/a&gt;
and released the first &lt;a href=&quot;https://github.com/dahlia/fedify/releases/tag/0.1.0&quot;&gt;version 0.1.0&lt;/a&gt; in early March. Before release,
I had planned to call it Fedikit, but &lt;a href=&quot;https://todon.eu/@hongminhee/111976051313889872&quot;&gt;just before release, I discovered there
was already a project with the same name, so I quickly changed it to Fedify&lt;/a&gt;.
The Python version I worked on under the codename Fedikit is &lt;a href=&quot;https://github.com/dahlia/fedikit&quot;&gt;still available on
GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I can proudly say that Fedify currently provides the most comprehensive set of
features needed for building an ActivityPub server. The fediverse isn&#39;t just
about implementing ActivityPub—you need to handle many specifications including
JSON-LD, &lt;a href=&quot;https://fedify.dev/manual/vocab&quot;&gt;Activity Vocabulary&lt;/a&gt;, WebFinger, &lt;a href=&quot;https://fedify.dev/manual/nodeinfo&quot;&gt;NodeInfo&lt;/a&gt;, &lt;a href=&quot;https://fedify.dev/manual/send#http-signatures&quot;&gt;HTTP Signatures&lt;/a&gt;,
&lt;a href=&quot;https://fedify.dev/manual/send#linked-data-signatures&quot;&gt;Linked Data Signatures&lt;/a&gt;, and &lt;a href=&quot;https://fedify.dev/manual/send#object-integrity-proofs&quot;&gt;Object Integrity Proofs&lt;/a&gt;. Fedify covers all of
these. In fact, Fedify implements many features that aren&#39;t even implemented in
major ActivityPub implementations like Mastodon or Misskey. I often see people
who mistakenly think implementing an ActivityPub server is simple after just
skimming the ActivityPub spec, start without any ActivityPub framework,
and end up overwhelmed by its complexity. I strongly recommend using Fedify for
anyone thinking about building an ActivityPub server.&lt;/p&gt;
&lt;p&gt;Another aspect I focused on while building Fedify was &lt;a href=&quot;https://fedify.dev/&quot;&gt;documentation&lt;/a&gt;.
I believed it needed not just &lt;a href=&quot;https://jsr.io/@fedify/fedify/doc&quot;&gt;reference documentation&lt;/a&gt; but also comprehensive
manuals covering all of Fedify&#39;s features. I would even write the manual
documentation first before implementing new features. As a result,
the documentation has grown quite extensive, and now I&#39;m contemplating how to
translate it into languages other than English.&lt;/p&gt;
&lt;p&gt;Finally, my greatest achievement with Fedify was the &lt;a href=&quot;https://writings.hongminhee.org/2024/07/ghost-funds-fedify/&quot;&gt;Ghost&#39;s funding of
Fedify&lt;/a&gt;. This allowed me to work on open source full-time for the first time
in my life. Moreover, Ghost is Fedify&#39;s biggest user. Ghost&#39;s ActivityPub
implementation is well underway and currently in private beta. It will likely
be released to the public next year.&lt;/p&gt;
&lt;h2&gt;Hollo&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.hollo.social/&quot;&gt;Hollo&lt;/a&gt; is a single-user ActivityPub server. While people typically create
fediverse accounts by joining a Mastodon or Misskey server they like,
some software engineers prefer to set up their own server connected to their
own domain name. However, software like Mastodon or Misskey is designed for
multiple users and has many features unnecessary for single users,
making it heavy and complicated to install. Hollo was created for such people.
Hollo only needs PostgreSQL to run, making installation relatively simple,
and it only includes features necessary for single users,
which is its main advantage.&lt;/p&gt;
&lt;p&gt;The background of creating Hollo is somewhat complex. Actually,
Hollo could be said to be the catalyst for creating Fedify,
as it was while starting to build an ActivityPub server like Hollo that
I realized the need for an ActivityPub server framework.
However, the code from that initial project wasn&#39;t reused in Hollo,
and the project name wasn&#39;t even Hollo at that time, so strictly speaking,
Hollo wasn&#39;t the direct cause for creating Fedify.
But it&#39;s true that after creating Fedify,
what I ultimately wanted to build was something like Hollo.&lt;/p&gt;
&lt;p&gt;However, after creating Fedify, Fedify itself became what I wanted to focus on,
and the original motivation somewhat faded. So by the time I actually started
building Hollo, its main purpose had become creating a demo for Fedify.
In fact, while building Hollo, I added needed features to Fedify and fixed bugs.
However, since it was part of the Fedify project, Hollo&#39;s code quality is much
lower compared to Fedify. I started addressing this issue after Hollo stopped
being considered part of the Fedify project, but there&#39;s still much room for
improvement in code quality.&lt;/p&gt;
&lt;p&gt;Unexpectedly, Hollo gained a user base in Japan, leading me to translate
the official documentation into Japanese and even set up a booth at an event
called &lt;a href=&quot;https://event.ospn.jp/osc2024-fall/&quot;&gt;Open Source Conference 2024 Tokyo/Fall&lt;/a&gt; in Japan. At this event,
I received tremendous help from &lt;a href=&quot;https://c.koliosky.com/@esurio1673&quot;&gt;Esurio&lt;/a&gt;,
a local Hollo user who helped manage the booth with me.&lt;/p&gt;
&lt;p&gt;Recently, for &lt;a href=&quot;https://en.wikipedia.org/wiki/Eating_your_own_dog_food&quot;&gt;dogfooding&lt;/a&gt;, I migrated from my Mastodon account to Hollo.&lt;/p&gt;
&lt;h2&gt;FediDev KR&lt;/h2&gt;
&lt;p&gt;One day, I realized there wasn&#39;t much exchange between developers creating
fediverse software in Korea. So I convinced &lt;a href=&quot;https://kodingwarrior.github.io/&quot;&gt;Lee Jae-yeol&lt;/a&gt;,
who had created a &lt;a href=&quot;https://github.com/kode-team/mastodon.nvim&quot;&gt;Mastodon client for Neovim&lt;/a&gt;,
to help establish the &lt;a href=&quot;https://fedidev.kr/&quot;&gt;FediDev KR&lt;/a&gt;. We first set up a &lt;a href=&quot;https://discord.gg/B2ABMBpHNA&quot;&gt;Discord server&lt;/a&gt; where
quite a few developers gathered.&lt;/p&gt;
&lt;p&gt;We also planned regular sprint meetups and held our &lt;a href=&quot;https://sprints.fedidev.kr/posts/2024-08-31-sprint/&quot;&gt;first meetup&lt;/a&gt; on August
31st at the &lt;a href=&quot;https://www.rtzr.ai/&quot;&gt;returnzero&lt;/a&gt; office, which surprisingly attracted many participants.
I still maintain connections in the fediverse with people I met there.&lt;/p&gt;
&lt;p&gt;Recently, offline interactions have been less frequent due to the year-end,
but we plan to resume active engagement next year.&lt;/p&gt;
&lt;h2&gt;First doujinshi sale&lt;/h2&gt;
&lt;p&gt;Since fall this year, I started actively engaging in the Japanese-speaking
fediverse, which led to interactions with Japanese Hollo users.
Among them, &lt;a href=&quot;https://c.koliosky.com/@esurio1673&quot;&gt;Esurio&lt;/a&gt; suggested participating in the Open Source Conference in
Japan, and after some consideration, I decided to exhibit. Since it was my first
time both participating in a Japanese event and setting up a booth, I received
various forms of help from Esurio. I want to take this opportunity to express
my gratitude.&lt;/p&gt;
&lt;p&gt;Anyway, since we decided to exhibit, we needed something to display, so as part
of this, I decided to print and sell a paper version of the Japanese translation
of Fedify&#39;s tutorial &lt;a href=&quot;https://fedify.dev/tutorial/microblog&quot;&gt;Creating your own federated microblog&lt;/a&gt;
(&lt;q lang=&quot;ja&quot;&gt;&lt;a href=&quot;https://github.com/dahlia/fedify-microblog-tutorial-ja&quot;&gt;自分だけのフェディバースのマイクロブログを作ろう！&lt;/a&gt;&lt;/q&gt;).
Fortunately, most of the books we brought were sold, so we could return quite
light. One of the book purchasers, &lt;a href=&quot;https://monaco.every-little.com/&quot;&gt;Monaco Koukoku&lt;/a&gt;
(&lt;span lang=&quot;ja&quot;&gt;モナコ広告&lt;/span&gt;), even gave a talk titled
&lt;a href=&quot;https://www.docswell.com/s/monaco_koukoku/5DN28R-fedilug05-20241123&quot;&gt;I tried making an ActivityPub server with Fedify&lt;/a&gt;
(&lt;q lang=&quot;ja&quot;&gt;FedifyでActivityPubサーバを作ってみた&lt;/q&gt;) at a &lt;a href=&quot;https://fedilug.y-zu.org/&quot;&gt;FediLUG&lt;/a&gt;
study meetup, sharing their experience following the tutorial.&lt;/p&gt;
&lt;p&gt;It was great to interact with people, even those who didn&#39;t buy the book, despite my limited Japanese.&lt;/p&gt;
&lt;h2&gt;Full-time fediverse development&lt;/h2&gt;
&lt;p&gt;Unexpectedly, things have taken a direction I couldn&#39;t have predicted at
the beginning of the year, and I&#39;ve become a sort of full-time fediverse developer.
Next year, I plan to focus on expanding the fediverse&#39;s foundation.
As part of this effort, I&#39;m working on creating an ActivityPub-based social
platform for software engineers, which I hope to release soon.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
     <title>Ghost funds Fedify</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/"
         
         />
       
         <id>https://writings.hongminhee.org/2024/07/ghost-funds-fedify/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/index.ja.html"
         
           hreflang="ja"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2024/07/ghost-funds-fedify/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2024-07-03T02:00:00.000Z</published>
     <updated>2026-04-17T08:52:06.575Z</updated>
     <content type="html">&lt;h1&gt;Ghost funds Fedify&lt;/h1&gt;
&lt;p&gt;I am happy to announce some great news!  &lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;, an open source project
I&#39;ve been working on since this spring, has been funded by &lt;a href=&quot;https://ghost.org/&quot;&gt;Ghost&lt;/a&gt;,
a global publishing platform.&lt;/p&gt;
&lt;h2&gt;What is Fedify?&lt;/h2&gt;
&lt;p&gt;First, let me explain what Fedify is.&lt;/p&gt;
&lt;p&gt;&lt;dfn&gt;&lt;a href=&quot;https://fedify.dev/&quot;&gt;Fedify&lt;/a&gt;&lt;/dfn&gt; is an &lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt; server framework.
&lt;dfn&gt;&lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt;&lt;/dfn&gt; protocol is behind the technology that allows
disparate social media services like the Mastodon, an open source project,
and Threads from Meta to come together and communicate.  This federation of
social media is called the &lt;dfn&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Fediverse&quot;&gt;fediverse&lt;/a&gt;&lt;/dfn&gt;.&lt;/p&gt;
&lt;p&gt;ActivityPub may seem like a simple protocol at first glance,
but it&#39;s actually quite complicated to implement interoperability
with other services.  I was looking for a framework that would take care of
those tricky parts for me, and since none existed, I created one.&lt;/p&gt;
&lt;h2&gt;Ghost&#39;s adoption of Fedify&lt;/h2&gt;
&lt;p&gt;Until a couple of months ago, Fedify was more of a toy for people&#39;s hobby
projects, but it still had a small community of users, and one day someone
told me about &lt;a href=&quot;https://activitypub.ghost.org/&quot;&gt;Ghost&#39;s adoption of ActivityPub&lt;/a&gt; and suggested that I should
try to sell Fedify to the Ghost team, since Ghost is also written in TypeScript.
I was hesitant at first, wondering if it would work, but when I heard that
the person who encouraged me to sell to Ghost had sent an email directly to
the Ghost team, I got the confidence to contact them.&lt;/p&gt;
&lt;p&gt;I was surprised to find out that the Ghost team was &lt;a href=&quot;https://activitypub.ghost.org/day4/&quot;&gt;reviewing Fedify
in a positive way&lt;/a&gt;, and they told me that they had indeed &lt;a href=&quot;https://activitypub.ghost.org/day-4/&quot;&gt;decided to go
ahead with Fedify&lt;/a&gt;. It was a surprise, and I was thrilled!&lt;/p&gt;
&lt;h2&gt;Funding&lt;/h2&gt;
&lt;p&gt;After that, I stayed in close contact with the Ghost team, especially the team
building ActivityPub into Ghost, and it wasn&#39;t long before they approached me
with an offer to fund the Fedify project and implement the features they wanted
to see added to Fedify.  I was in the middle of a job hunt and was sending my
résumé to various companies, so this was quite a tempting offer.&lt;/p&gt;
&lt;p&gt;I agreed to work with them for about a couple of weeks and got a little funding.
I was able to work on Fedify while preparing for my job search, and I found it
to be very immersive and enjoyable.  Eventually, I expressed my interest in
working on Fedify full-time if I could be funded for a longer period of time,
and the Ghost team responded positively.&lt;/p&gt;
&lt;p&gt;So I&#39;ve been able to continue working on Fedify with funding for quite some
time now.  I once worked on an open source project full-time at my previous job,
but this is the first time I&#39;ve ever worked on an open source project I started
in a funded way, and I&#39;m excited about the future.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
     <title>My new blog</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2021/12/new-blog/"
         
         />
       
         <id>https://writings.hongminhee.org/2021/12/new-blog/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2021/12/new-blog/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2021/12/new-blog/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2021/12/new-blog/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2021-12-28T18:27:00.000Z</published>
     <updated>2026-04-17T08:52:06.575Z</updated>
     <content type="html">&lt;h1&gt;My new blog&lt;/h1&gt;
&lt;p&gt;I&#39;ve had two blogs in my life.&lt;/p&gt;
&lt;p&gt;My first blog, which I started right before I graduated from high school,
lasted about three years and I wrote over a hundred posts.
It was initially created with a software called Typo&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;,
and I moved to WordPress a few months later.&lt;/p&gt;
&lt;p&gt;I started my second blog in 2010 and wrote over 200 posts in seven years.
I started it as a Tumblr, but later moved it to GitHub Pages using a static
blog generator — something most software engineers do at some point.&lt;/p&gt;
&lt;p&gt;I stopped blogging for a while in 2017.  As I stopped writing,
I lost what I wanted to write about, and I had no idea what to write about.
So last spring, I decided to write short pieces on what I read.
Writing them made me want to start blogging again,
but my old blog felt dusty and unmotivating.
Even a lot of what I wrote previously seemed unpleasant.
I&#39;ve changed my mind about a lot of things since then,
so it wasn&#39;t enough to make a few changes.&lt;/p&gt;
&lt;p&gt;I was also getting tired of my static blog generator,
which was a single file Python script I made myself.  In the meantime,
I had started writing almost all of my private notes in &lt;a href=&quot;https://en.wikipedia.org/wiki/Korean_mixed_script&quot;&gt;Korean mixed script&lt;/a&gt;
(國漢文混用體), so I wanted to write my blogs in mixed script,
at least the raw text.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;  I had also written a software called &lt;a href=&quot;https://github.com/dahlia/seonbi&quot;&gt;Seonbi&lt;/a&gt;,
which converts Korean mixed script to &lt;a href=&quot;https://en.wikipedia.org/wiki/Hangul&quot;&gt;hangul&lt;/a&gt; only (한글전용).
So I decided to just create a third blog.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn3&quot; id=&quot;fnref3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I started by creating a blog with Jekyll, which is available on GitHub Pages
without any setup, but it wasn&#39;t long before I realized that this setup made it
difficult to take advantage of Seonbi.
I probably spent a month or two trying out other static blog generators.
After doing some research, I found that many of the requirements I was asking
for were not very reasonable and therefore not commonly asked for.
In 21st century Korea, who would want to write articles in Korean mixed script
and then publish them in hangul only.&lt;/p&gt;
&lt;p&gt;For some strange reason, I ended up creating another static blog generator
called &lt;a href=&quot;https://github.com/dahlia/jikji&quot;&gt;Jikji&lt;/a&gt;.  I also used &lt;a href=&quot;https://deno.land/&quot;&gt;Deno&lt;/a&gt; to learn a new platform,
and I liked it a lot, so I&#39;m going to use Deno a lot instead of Python
in the future.  It&#39;s a shame that I already dislike it right after
I finished making it, but I promised myself to start a blog before 2021.&lt;/p&gt;
&lt;p&gt;Anyway, now that I&#39;ve created a new blog,
I&#39;m going to start writing regularly again.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;It was a blogging software written in Ruby on Rails that was popular
at the time, and I believe it&#39;s now called &lt;a href=&quot;https://github.com/publify/publify&quot;&gt;Publify&lt;/a&gt;. &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Note to non-Korean speakers: Much of the vocabulary of modern Korean comes
from &lt;a href=&quot;https://en.wikipedia.org/wiki/Classical_Chinese&quot;&gt;Literary Chinese&lt;/a&gt; (漢文), just as much of the vocabulary of modern
English comes from Latin.&lt;/p&gt;
&lt;p&gt;When these words are written in Chinese characters and the rest of the
vocabulary is written in hangul, it is called &lt;em&gt;mixed script&lt;/em&gt;, and when
all vocabulary is written in Hangul only, it is called &lt;em&gt;hangul only&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;See also related entry on Wikipedia: &lt;a href=&quot;https://en.wikipedia.org/wiki/Debate_on_mixed_script_and_hangeul_exclusivity&quot;&gt;Debate on mixed script and hangeul
exclusivity&lt;/a&gt;. &lt;a href=&quot;#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;I moved my blog three times, but I always did my best to keep
the permalinks.  Although I&#39;ve stopped updating both the first and second
blogs, I&#39;m going to keep them as archives. &lt;a href=&quot;#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
    </entry>
  
    <entry>
     <title>Nobody Knows</title>
     
     
     
       <link rel="alternate" href="https://writings.hongminhee.org/2020/07/nobody-knows/"
         
         />
       
         <id>https://writings.hongminhee.org/2020/07/nobody-knows/</id>
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2020/07/nobody-knows/index.en.html"
         
           hreflang="en"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2020/07/nobody-knows/index.ko-kore.html"
         
           hreflang="ko-Kore"
         
         />
       
     
       <link rel="alternate" href="https://writings.hongminhee.org/2020/07/nobody-knows/index.ko-hang-kr.html"
         
           hreflang="ko-Hang-KR"
         
         />
       
     
     <published>2020-07-08T19:07:00.000Z</published>
     <updated>2026-04-17T08:52:06.574Z</updated>
     <content type="html">&lt;h1&gt;&lt;cite&gt;Nobody Knows&lt;/cite&gt;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/h1&gt;
&lt;p&gt;I watched Hirokazu Kore-eda&#39;s &lt;cite&gt;Nobody Knows&lt;/cite&gt;
(&lt;cite lang=&quot;ja&quot;&gt;誰も知らない&lt;/cite&gt;) with Lisa, and I had to
choke back tears several times.  To put it bluntly, it was a &lt;em&gt;total disaster&lt;/em&gt;
and a &lt;em&gt;systemic tragedy&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Artificial structures have &lt;a href=&quot;https://en.wikipedia.org/wiki/Redundancy_(engineering)&quot;&gt;redundancies&lt;/a&gt;, so even if one or two parts fail,
it usually doesn&#39;t disrupt what the whole structure is trying to accomplish.
Therefore, if a structure malfunctions significantly, it can be said that there
are already many layers of failure.  Watching the first half of the film,
I thought that the tragedy that befell this family had to be the result of
more than just one or two things going wrong, it had to be the cumulative effect
of many things going wrong on a larger level — hence the &lt;em&gt;total disaster&lt;/em&gt;.
But by the end of the film, this idea was turned inside out.
The tragic loss of life in one or two of these families does not interfere with
the benefit (functioning) of the social system for most of &lt;em&gt;us&lt;/em&gt;, and therefore
&lt;q&gt;&lt;cite&gt;Nobody Knows&lt;/cite&gt;&lt;/q&gt; about their deaths — that is, they are
&lt;em&gt;systemic tragedies&lt;/em&gt;, and they &lt;em&gt;function&lt;/em&gt; as redundancies in the system for
the rest of us to enjoy our lives…&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://www.facebook.com/hongminhee/posts/10222886443049439&quot;&gt;I originally posted this in Korean on my Facebook&lt;/a&gt;, but now I don&#39;t
use Facebook anymore, so I&#39;m posting it here. &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
    </entry>
  
</feed>
