<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: fwsgonzo</title><link>https://news.ycombinator.com/user?id=fwsgonzo</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 15 May 2026 18:26:18 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=fwsgonzo" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[C++ Scripting with Libriscv]]></title><description><![CDATA[
<p>Article URL: <a href="https://libriscv.no/blog/expert-example/">https://libriscv.no/blog/expert-example/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47860289">https://news.ycombinator.com/item?id=47860289</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 22 Apr 2026 07:33:01 +0000</pubDate><link>https://libriscv.no/blog/expert-example/</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=47860289</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47860289</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Show HN: Threadprocs – executables sharing one address space (0-copy pointers)"]]></title><description><![CDATA[
<p>You either have to pause the caller or prevent the caller from trampling the memory while the callee is using it. If you look at previous work like VMRPC (<a href="https://ieeexplore.ieee.org/document/5542746/" rel="nofollow">https://ieeexplore.ieee.org/document/5542746/</a>) they make the shared area read-only while the callee is using it.<p>In IPRE, I am pausing the caller while the remote call is on-going, which means "just having a shared block" is inferior to just sharing everything. It's just so much easier and nicer to be able to pass literally anything you want.<p>The caveat is that the callee has to wait, but I think the fact that the remote is now running in the SAME THREAD without any scheduling involved makes up for it. It's a true synchronous remote function call with some overhead.</p>
]]></description><pubDate>Wed, 25 Mar 2026 09:01:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47514971</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=47514971</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47514971</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Show HN: Threadprocs – executables sharing one address space (0-copy pointers)"]]></title><description><![CDATA[
<p>Sorry about that, the conference was on Feb 2, and it's supposed to be out any day/week now. I don't have a date.<p>There is a blog-style writeup here: <a href="https://fwsgonzo.medium.com/an-update-on-tinykvm-7a38518e57e9" rel="nofollow">https://fwsgonzo.medium.com/an-update-on-tinykvm-7a38518e57e...</a><p>Not as rigorous as the paper, but the gist is there.</p>
]]></description><pubDate>Mon, 23 Mar 2026 17:41:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47492683</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=47492683</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47492683</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Show HN: Threadprocs – executables sharing one address space (0-copy pointers)"]]></title><description><![CDATA[
<p>Best I can do is reply to an e-mail if someone asks for the paper, since it's not out yet. The e-mail ends with hotmail.</p>
]]></description><pubDate>Mon, 23 Mar 2026 17:01:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47492142</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=47492142</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47492142</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Show HN: Threadprocs – executables sharing one address space (0-copy pointers)"]]></title><description><![CDATA[
<p>I actually just published a paper about something like this, which I implemented in both libriscv and TinyKVM called "Inter-Process Remote Execution (IPRE):
Low-latency IPC/RPC using merged address spaces".<p>Here is the abstract:
This paper introduces Inter-Process Remote Execution (IPRE), whose primary function is enabling gated persistence for per-request isolation architectures with microsecond-latency access to persistent services. IPRE eliminates scheduler dependency for descheduled processes by allowing a virtual machine to directly and safely call, execute functions in a remote virtual machines address space. Unlike prior approaches requiring hardware modifications
(dIPC) or kernel changes (XPC), IPRE works with standard virtualization primitives, making it immediately deployable on commodity systems.
We present two implementations: libriscv (12-14ns overhead, emulated execution) and TinyKVM (2-4us overhead, native execution). Both eliminate data serialization through address-space merging. Under realistic scheduler contention from schbench workloads (50-100% CPU utilization),
IPRE maintains stable tail latency (p99<5us), while a state-of-the-art lock-free IPC framework shows 1,463× p99 degradation (4.1us to 6ms) when all CPU cores are saturated. IPRE thus enables architectural patterns (per-request isolation, fine-grained microservices) that incur millisecond-scale tail latency in busy
multi-tenant systems using traditional IPC.<p>Bottom line: If you're doing synchronous calls to a remote party, IPRE wouldn't require any scheduler mediation. The same applies to your repo.
Passing allocator-less structures to the remote is probably a landmine waiting to happen. If you structure both parties to use custom allocators, at least for the remote calls, you can track and even steal allocations (using a shared memory area). With IPRE there is extra risk of stale pointers because the remote part is removed from the callers memory after it completes. The paper will explain all the details, but for example since we control the VMM we can close the remote session if anything bad happens.
(This paper is not out yet, but it should be very soon)<p>The best part about this kind of architecture, which you immediately mention, is the ability to completely avoid serialization. Passing a complex struct by reference and being able to use the data as-is is a big benefit. It breaks down when you try to do this with something like Deno, unfortunately. But you could do Deno <-> C++, for example.<p>For libriscv the implementation is simpler: Just loan remote-looking pages temporarily so that read/write/execute works, and then let exception-handling handle abnormal disconnection. With libriscv it's also possible for the host to take over the guests global heap allocator, which makes it possible to free something that was remotely allocated. You can divide the address space into the number of possible callers, and one or more remotes, then if you give the remote a std::string larger than SSO, the address will reveal the source and the source tracks its own allocations, so we know if something didn't go right.
Note that this is only an interest for me, as even though (for example) libriscv is used in large codebases, the remote RPC feature is not used at all, and hasn't been attemped. It's a Cool Idea that kinda works out, but not ready for something high stakes.</p>
]]></description><pubDate>Mon, 23 Mar 2026 16:48:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47491965</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=47491965</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47491965</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Show HN: Three new Kitten TTS models – smallest less than 25MB"]]></title><description><![CDATA[
<p>desktop CPUs running inference on a single background thread would be the ideal case for what I'm considering.</p>
]]></description><pubDate>Thu, 19 Mar 2026 19:34:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47444698</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=47444698</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47444698</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Show HN: Three new Kitten TTS models – smallest less than 25MB"]]></title><description><![CDATA[
<p>How much work would it be to use the C++ ONNX run-time with this instead of Python? Is it a Claudeable amount of work?<p>The iOS version is Swift-based.</p>
]]></description><pubDate>Thu, 19 Mar 2026 16:51:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47442362</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=47442362</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47442362</guid></item><item><title><![CDATA[Automatia and the Case for Vanilla]]></title><description><![CDATA[
<p>Article URL: <a href="https://fwsgonzo.medium.com/automatia-and-the-case-for-vanilla-b3209cdf1583">https://fwsgonzo.medium.com/automatia-and-the-case-for-vanilla-b3209cdf1583</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47014442">https://news.ycombinator.com/item?id=47014442</a></p>
<p>Points: 9</p>
<p># Comments: 1</p>
]]></description><pubDate>Sat, 14 Feb 2026 13:39:36 +0000</pubDate><link>https://fwsgonzo.medium.com/automatia-and-the-case-for-vanilla-b3209cdf1583</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=47014442</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47014442</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Lessons you will learn living in a snowy place"]]></title><description><![CDATA[
<p>Gjerne det! Sitter her om dagen: <a href="https://discord.gg/4e3yd5ej" rel="nofollow">https://discord.gg/4e3yd5ej</a></p>
]]></description><pubDate>Thu, 12 Feb 2026 09:09:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=46986516</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46986516</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46986516</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Lessons you will learn living in a snowy place"]]></title><description><![CDATA[
<p>Same here, also on an island. We lost power for ~8 hours during a storm, however that is the longest I've ever experienced. I have this stone fireplace: <a href="https://www.norskkleber.no/ovner/marcello/" rel="nofollow">https://www.norskkleber.no/ovner/marcello/</a> (Marcello 140), which kept my 75sqm living room heated through the whole thing.<p>Since that storm, we have decided to buy a second fireplace for upstairs with a cooking top.</p>
]]></description><pubDate>Wed, 11 Feb 2026 08:07:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=46972211</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46972211</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46972211</guid></item><item><title><![CDATA[New comment by fwsgonzo in "The spectrum of isolation: From bare metal to WebAssembly"]]></title><description><![CDATA[
<p>This is true. A multi-tier JIT-compiler requires writable execute memory and the ability to flush icache. Loading segments dynamically is nice and covers a lot of the ground, but it won't be a magic solution to dynamic languages like JavaScript. Modern WASM emulators already implement a full compiler, linker and JIT-compiler in one, almost starting to look like v8. I'm not sure if adding in-guest JIT support is going in the right direction.</p>
]]></description><pubDate>Fri, 16 Jan 2026 20:20:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46651678</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46651678</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46651678</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Show HN: LoongArch Userspace Emulator"]]></title><description><![CDATA[
<p>It's designed to be low-latency enough that calling into the scripting solution is not considered a high cost. With something like Lua you're likely to hold back a lot, as it has a really high entry/exit cost, and the same is true for calling out to the host. libloong has 40x lower latencies.</p>
]]></description><pubDate>Mon, 29 Dec 2025 20:24:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46425141</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46425141</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46425141</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Show HN: LoongArch Userspace Emulator"]]></title><description><![CDATA[
<p>Hey, and thanks! libloong is a little bit restrained in its design. It's designed specifically to be the lowest latency sandbox. libriscv is more flexible in that it can load dynamic ELFs and run programs with LuaJIT embedded. I actually haven't been able to run Go programs in libloong yet, but I do want to reach that level!</p>
]]></description><pubDate>Mon, 29 Dec 2025 20:22:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46425118</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46425118</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46425118</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Tell HN: Merry Christmas"]]></title><description><![CDATA[
<p>Merry Christmas to all</p>
]]></description><pubDate>Wed, 24 Dec 2025 15:54:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=46376613</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46376613</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46376613</guid></item><item><title><![CDATA[Show HN: LoongArch Userspace Emulator]]></title><description><![CDATA[
<p><a href="https://fwsgonzo.medium.com/notes-on-libloong-loongarch-64-bit-emulation-515ea6610cad" rel="nofollow">https://fwsgonzo.medium.com/notes-on-libloong-loongarch-64-b...</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46375067">https://news.ycombinator.com/item?id=46375067</a></p>
<p>Points: 43</p>
<p># Comments: 12</p>
]]></description><pubDate>Wed, 24 Dec 2025 12:40:00 +0000</pubDate><link>https://github.com/libriscv/libloong</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46375067</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46375067</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Engineers who dismiss AI"]]></title><description><![CDATA[
<p>I would never have had a working LoongArch emulator in 2 weeks at the kind of quality that I desire without it. Not because it writes perfect code, but because it sets everything up according to my will, does some things badly, and then I can take over and do the rest. The first week I was just amending a single commit that set everything up right and got a few programs working. A week after that it runs on multiple platforms with JIT-compilation. I'm not sure what to say, really. I obviously understand the subject matter deeply in this case. I probably wouldn't have had this result if I ventured into the unknown.<p>Although, I also made it create Rust and Go bindings. Two languages I don't really know that well. Or, at least not well enough for that kind of start-to-finish result.<p>Another commenter wrote a really interesting question: How do you not degrade your abilities? I have to say that I still had to spend days figuring out really hard problems. Who knew that 64-bit MinGW has a different struct layout for gettimeofday than 64-bit Linux? It's not that it's not obvious in hindsight, but it took me a really long time to figure out that was the issue, when all I have to go on is something that looks like incorrect instruction emulation. I must have read the LoongArch manual up and down several times and gone through instructions one by one, disabling everything I could think of, before finally landing on the culprit just being a mis-emulated kind-of legacy system call that tells you the time. ... and if the LLM had found this issue for me, I would have been very happy about it.<p>There are still unknowns that LLMs cannot help with, like running Golang programs inside the emulator. Golang has a complex run-time that uses signal-based preemption (sysmon) and threads and many other things, which I do emulate, but there is still something missing to pass all the way through to main() even for a simple Hello World. Who knows if it's the ucontext that signals can pass or something with threads or per-state signal state. Progression will require reading the Go system libraries (which are plain source code), the assembly for the given architecture (LA64), and perhaps instrumenting it so that I can see what's going wrong. Another route could be implementing an RSP server for remote GDB via a simple TCP socket.<p>As a conclusion, I will say that I can only remember twice I  ditched everything the LLM did and just did it myself from scratch. It's bound to happen, as programming is an opinionated art. But I've used it a lot just to see what it can dream up, and it has occasionally impressed. Other times I'm in disbelief as it mishandles simple things like preventing an extra masking operation by moving something signed into the top bits so that extracting it is a single shift, while sharing space with something else in the lower bits.
Overall, I feel like I've spent more time thinking about more high-level things (and occasionally low-level optimizations).</p>
]]></description><pubDate>Fri, 19 Dec 2025 13:13:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=46325445</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46325445</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46325445</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Ask HN: Anyone else hitting Claude Code Pro limits after 1 or 2 prompts?"]]></title><description><![CDATA[
<p>Just have a look at r/anthropic. It's well known that you hit a limit after no usage at all with Pro (aka. demo). Chargeback is the only thing they will understand.</p>
]]></description><pubDate>Wed, 17 Dec 2025 07:54:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46299327</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46299327</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46299327</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Pro-democracy HK tycoon Jimmy Lai convicted in national security trial"]]></title><description><![CDATA[
<p>I agree. I also challenge readers to watch TV broadcasts from politicians speaking in 70s, 80s and even 90s. You won't even believe your ears. But, the slow takeover of the world by international conglomerates buying up everything else, merging and bankrupting competition just doesn't seem to be on anyones mind with any power to deal with it. An acquaintance works at one of these Frankensteins monsters and there is a hodge podge of internal systems. It's hard to believe how many companies they have bought up over the decades.</p>
]]></description><pubDate>Mon, 15 Dec 2025 18:21:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=46278261</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46278261</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46278261</guid></item><item><title><![CDATA[New comment by fwsgonzo in "Ask HN: Is starting a new project in C++ just a mistake in 2025?"]]></title><description><![CDATA[
<p>I haven't bailed yet, but your problems is par for the course in C++. The only saving grace is libraries with simple/modern CMake rules, which is not always available. A typical offender is protobuf, which is really hard to statically link correctly on MinGW. Libraries that never graduate from custom makefiles are the worst offenders. With Automake being just barely above that again.<p>It is the biggest problem with C++ right now. We can't have nice things (no networking in the stdlib), and we also can't have nice packages (no networking in $pkg), so we end up with whatever appears on search for site:github.com and C++ whatever. It's really not that great. The only tradeoff is we really care about our deps, and won't pull in the world. So we're harder to target for supply chain attacks.<p>You shouldn't be waiting 20mins for CI builds though, unless you have a massive codebase and 10 platforms to build for. If you're making a Godot addon for every platform, I get it. I have that issue. But the 20mins are down from 50mins without ccache. Ccache is ~5 lines in the GA yaml.</p>
]]></description><pubDate>Tue, 25 Nov 2025 12:57:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=46045351</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46045351</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46045351</guid></item><item><title><![CDATA[The per-request isolation architecture of TinyKVM]]></title><description><![CDATA[
<p>Article URL: <a href="https://fwsgonzo.medium.com/per-request-isolation-in-tinykvm-explained-080e84328ba4">https://fwsgonzo.medium.com/per-request-isolation-in-tinykvm-explained-080e84328ba4</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46002633">https://news.ycombinator.com/item?id=46002633</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 21 Nov 2025 08:57:06 +0000</pubDate><link>https://fwsgonzo.medium.com/per-request-isolation-in-tinykvm-explained-080e84328ba4</link><dc:creator>fwsgonzo</dc:creator><comments>https://news.ycombinator.com/item?id=46002633</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46002633</guid></item></channel></rss>