<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: gavinhoward</title><link>https://news.ycombinator.com/user?id=gavinhoward</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 10 Apr 2026 01:43:10 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=gavinhoward" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by gavinhoward in "The future of version control"]]></title><description><![CDATA[
<p>> At this point if your VCS isn't a layer above git plumbing, nobody gonna waste time using it.<p>Probably true, but it's a shame because there are better ways of storing and processing the data, ways that <i>natively</i> handle binary files, semantics, and large files without falling over.</p>
]]></description><pubDate>Mon, 23 Mar 2026 20:15:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47494512</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=47494512</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47494512</guid></item><item><title><![CDATA[New comment by gavinhoward in "A case against currying"]]></title><description><![CDATA[
<p>Okay, but if you combine the curried and tuple styles, and add a dash of runtime function pointers, you can solve the expression problem. [1]<p>[1]: <a href="https://gavinhoward.com/2025/04/how-i-solved-the-expression-problem/" rel="nofollow">https://gavinhoward.com/2025/04/how-i-solved-the-expression-...</a></p>
]]></description><pubDate>Sun, 22 Mar 2026 18:51:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47480769</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=47480769</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47480769</guid></item><item><title><![CDATA[New comment by gavinhoward in "The future of version control"]]></title><description><![CDATA[
<p>Bram Cohen is awesome, but this feels a little bare. I've put much more thought into version control ([1]), including the use of CRDTs (search for "# History Model" and read through the "Implementing CRDTs" section).<p>[1]: <a href="https://gavinhoward.com/uploads/designs/yore.md" rel="nofollow">https://gavinhoward.com/uploads/designs/yore.md</a></p>
]]></description><pubDate>Sun, 22 Mar 2026 18:44:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=47480695</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=47480695</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47480695</guid></item><item><title><![CDATA[New comment by gavinhoward in "Software engineers should be a little bit cynical"]]></title><description><![CDATA[
<p>> For instance, you might think that big tech engineers are being deliberately demoralized as part of an anti-labor strategy to prevent them from unionizing, which is nuts. Tech companies are simply not set up to engage in these kind of conspiracies.<p><a href="https://en.wikipedia.org/wiki/High-Tech_Employee_Antitrust_Litigation" rel="nofollow">https://en.wikipedia.org/wiki/High-Tech_Employee_Antitrust_L...</a></p>
]]></description><pubDate>Sun, 28 Dec 2025 21:56:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=46414905</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=46414905</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46414905</guid></item><item><title><![CDATA[New comment by gavinhoward in "Ask HN: What skills do you want to develop or improve in 2026?"]]></title><description><![CDATA[
<p>I have had to put programming aside in 2025, probably for the rest of my life, so 2026 will be the year I reskill and reinvent myself.<p>But most importantly, I want to finally become as kind, patient, and charitable as I have always wanted to be.</p>
]]></description><pubDate>Fri, 26 Dec 2025 06:54:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46389818</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=46389818</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46389818</guid></item><item><title><![CDATA[Piecemeal Formal Verification: Cloudflare, Java Exceptions, and Rust Mutexes]]></title><description><![CDATA[
<p>Article URL: <a href="https://gavinhoward.com/2025/12/piecemeal-formal-verification-cloudflare-java-exceptions-and-rust-mutexes/">https://gavinhoward.com/2025/12/piecemeal-formal-verification-cloudflare-java-exceptions-and-rust-mutexes/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46292011">https://news.ycombinator.com/item?id=46292011</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 16 Dec 2025 18:11:36 +0000</pubDate><link>https://gavinhoward.com/2025/12/piecemeal-formal-verification-cloudflare-java-exceptions-and-rust-mutexes/</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=46292011</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46292011</guid></item><item><title><![CDATA[Use the Mikado Method to do safe changes in a complex codebase]]></title><description><![CDATA[
<p>Article URL: <a href="https://understandlegacycode.com/blog/a-process-to-do-safe-changes-in-a-complex-codebase/">https://understandlegacycode.com/blog/a-process-to-do-safe-changes-in-a-complex-codebase/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46228224">https://news.ycombinator.com/item?id=46228224</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 11 Dec 2025 06:11:22 +0000</pubDate><link>https://understandlegacycode.com/blog/a-process-to-do-safe-changes-in-a-complex-codebase/</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=46228224</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46228224</guid></item><item><title><![CDATA[New comment by gavinhoward in "Cloudflare outage should not have happened"]]></title><description><![CDATA[
<p>Hey, where can I apply to a job like yours? I may not be smart enough, but I may be. And I am very interested in formal verification.</p>
]]></description><pubDate>Fri, 05 Dec 2025 20:03:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46166538</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=46166538</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46166538</guid></item><item><title><![CDATA[New comment by gavinhoward in "The current state of the theory that GPL propagates to AI models"]]></title><description><![CDATA[
<p>SAMS does do that. Read my article carefully; it also requires modification and distribution rights for users. See principles 0 and 1.</p>
]]></description><pubDate>Sat, 29 Nov 2025 17:55:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=46089404</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=46089404</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46089404</guid></item><item><title><![CDATA[New comment by gavinhoward in "A Tale of Four Fuzzers"]]></title><description><![CDATA[
<p>The title of the blog post downplays the absolute masterclass that this post is. It should be called "A Tale of Four Fuzzers: Best Practices for Advanced Fuzzing."<p>And if you don't have time, just go to the bullet point list at the end; that's all of the best practices, and they are fantastic.</p>
]]></description><pubDate>Fri, 28 Nov 2025 18:29:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=46081341</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=46081341</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46081341</guid></item><item><title><![CDATA[New comment by gavinhoward in "The current state of the theory that GPL propagates to AI models"]]></title><description><![CDATA[
<p><a href="https://gavinhoward.com/2023/12/is-source-available-really-that-bad/" rel="nofollow">https://gavinhoward.com/2023/12/is-source-available-really-t...</a></p>
]]></description><pubDate>Thu, 27 Nov 2025 18:13:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46071779</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=46071779</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46071779</guid></item><item><title><![CDATA[Redundancy vs. dependencies: which is worse?]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.yosefk.com/blog/redundancy-vs-dependencies-which-is-worse.html">https://www.yosefk.com/blog/redundancy-vs-dependencies-which-is-worse.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45994353">https://news.ycombinator.com/item?id=45994353</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 20 Nov 2025 16:23:21 +0000</pubDate><link>https://www.yosefk.com/blog/redundancy-vs-dependencies-which-is-worse.html</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=45994353</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45994353</guid></item><item><title><![CDATA[New comment by gavinhoward in "BC Maintenance Terms"]]></title><description><![CDATA[
<p>I hope that FOSS work is never a burden, but that's too idealistic. For some, FOSS work <i>is</i> a burden on them and their loved ones.<p>To those for whom it is, please don't feel obligated to continue. I haven't, and I made this public so that others will be able to discard their feelings of obligation.<p>Let's get paid to hold up the sky.</p>
]]></description><pubDate>Mon, 21 Jul 2025 18:15:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=44638499</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=44638499</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44638499</guid></item><item><title><![CDATA[BC Maintenance Terms]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/gavinhoward/bc/commit/341c9388192">https://github.com/gavinhoward/bc/commit/341c9388192</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44638498">https://news.ycombinator.com/item?id=44638498</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Mon, 21 Jul 2025 18:15:26 +0000</pubDate><link>https://github.com/gavinhoward/bc/commit/341c9388192</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=44638498</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44638498</guid></item><item><title><![CDATA[New comment by gavinhoward in "The impact of file position on code review"]]></title><description><![CDATA[
<p>One of the few times I've read a paper before it was posted.<p>I like this paper. While it's not anything groundbreaking or sensational, it did help me with the design of something I am working on.</p>
]]></description><pubDate>Thu, 17 Jul 2025 19:55:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=44597474</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=44597474</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44597474</guid></item><item><title><![CDATA[New comment by gavinhoward in "Zig's New Async I/O"]]></title><description><![CDATA[
<p>> It has been mentioned that it’s possible that the default for debug builds is that every single function is compiled as an async function. I.e. there is canonically only one function color.<p>But then, for those that choose to only use blocking I/O or green threads, they still pay the penalty of async merely existing.<p>> That’s a <i>really</i> bad take. It’s not much different from what they did to make allocators explicit.<p>I mean, Zig explicit allocators are really the same thing is Go interfaces, just dressed up as an innovative feature by a specific use case. This is what I mean by "appearing" innovative: they are taking old and tested ideas and presenting them in new ways to make them appear new.<p>Also, Zig could have had explicit allocators without needing to pass them to every function [1].<p>> They’ve moved away from designing in a bunch of fancy syntax that locks users into one particular concurrency model, and gone for a more explicit and boring design which puts power in the hands of the user.<p>Except that if every function is made async, they have actually removed from users the power to choose to <i>not</i> use async.<p>[1]: <a href="https://jai.community/t/context/163" rel="nofollow">https://jai.community/t/context/163</a></p>
]]></description><pubDate>Sun, 13 Jul 2025 17:49:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=44552121</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=44552121</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44552121</guid></item><item><title><![CDATA[New comment by gavinhoward in "Zig's New Async I/O"]]></title><description><![CDATA[
<p>From my experience, the calling convention was, in 0.9.x, just an implementation detail, until it wasn't. I think I may still reserve judgment for when async is fully implemented. Then I'll torture it again.</p>
]]></description><pubDate>Sun, 13 Jul 2025 17:39:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=44552045</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=44552045</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44552045</guid></item><item><title><![CDATA[New comment by gavinhoward in "Zig's New Async I/O"]]></title><description><![CDATA[
<p>As the author of a semi-famous post about how Zig has function colors [1], I decided to read up on this.<p>I see that blocking I/O is an option:<p>> The most basic implementation of `Io` is one that maps to blocking I/O operations.<p>So far, so good, but blocking I/O is not async.<p>There is a thread pool that uses blocking I/O. Still good so far, but blocking I/O is still not async.<p>Then there's green threads:<p>> This implementation uses `io_uring` on Linux and similar APIs on other OSs for performing I/O combined with a thread pool. The key difference is that in this implementation OS threads will juggle multiple async tasks in the form of green threads.<p>Okay, they went the Go route on this one. Still (sort of) not async, but there is an important limitation:<p>> This implementation requires having the ability to perform stack swapping on the target platform, meaning that it will not support WASM, for example.<p>But still no function colors, right?<p>Unfortunately not:<p>> This implementation [stackless coroutines] won’t be available immediately like the previous ones because it depends on reintroducing a <i>special function calling convention</i> and rewriting function bodies into state machines that don’t require an explicit stack to run.<p>(Emphasis added.)<p>And the function colors appear again.<p>Now, to be fair, since there are multiple implementation options, you <i>can</i> avoid function colors, especially since `Io` is a value. But those options are either:<p>* Use blocking I/O.<p>* Use threads with blocking I/O.<p>* Use green threads, which Rust removed [2] for good reasons [3]. It only works in Go because of the garbage collector.<p>In short, the real options are:<p>* Block (not async).<p>* Use green threads (with their problems).<p>* Function colors.<p>It doesn't appear that the function colors problem has been defeated. Also, it appears to me that the Zig team decided to have every concurrency technique in the hope that it would appear innovative.<p>[1]: <a href="https://gavinhoward.com/2022/04/i-believe-zig-has-function-colors/" rel="nofollow">https://gavinhoward.com/2022/04/i-believe-zig-has-function-c...</a><p>[2]: <a href="https://github.com/aturon/rfcs/blob/remove-runtime/active/0000-remove-runtime.md">https://github.com/aturon/rfcs/blob/remove-runtime/active/00...</a><p>[3]: <a href="https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2018/p1364r0.pdf" rel="nofollow">https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2018/p13...</a></p>
]]></description><pubDate>Sun, 13 Jul 2025 05:33:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=44547778</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=44547778</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44547778</guid></item><item><title><![CDATA[Fsyncgate: Errors on Fsync Are Unrecovarable]]></title><description><![CDATA[
<p>Article URL: <a href="https://danluu.com/fsyncgate/">https://danluu.com/fsyncgate/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44532621">https://news.ycombinator.com/item?id=44532621</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 11 Jul 2025 14:36:19 +0000</pubDate><link>https://danluu.com/fsyncgate/</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=44532621</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44532621</guid></item><item><title><![CDATA[New comment by gavinhoward in "Tree Borrows"]]></title><description><![CDATA[
<p>This looks excellent. I will probably implement this model for my own language.</p>
]]></description><pubDate>Wed, 09 Jul 2025 18:46:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=44513506</link><dc:creator>gavinhoward</dc:creator><comments>https://news.ycombinator.com/item?id=44513506</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44513506</guid></item></channel></rss>