<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: WorldMaker</title><link>https://news.ycombinator.com/user?id=WorldMaker</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 12 Apr 2026 13:47:18 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=WorldMaker" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by WorldMaker in "Why I'm Building a Database Engine in C#"]]></title><description><![CDATA[
<p>> One of the huge things that I love about Rust is the lack of a runtime framework. I don't need to figure out how to bundle / ship / install a framework at runtime.<p>Rust has a runtime, it's just tiny and auto-bundled (for now). Modern .NET's support for self-contained bundling has gotten pretty good. AOT is getting better too, and AOT-ready code (switch Reflection for Source Generators as much as possible, for instance) can do some very heavy treeshaking of the runtime.<p>Also, yeah native embedding has gotten somewhat easier in recent years depending on the style of API you want to present to native code. Furthermore both Godot and Unity (differently) embed .NET/C# as options in game development. I certainly expect Typhon is primarily targeting Godot and/or (eventually) Unity (when it finishes switching to coreclr to support more of these features) embedding (but maybe also Stride, a fully C# game engine).</p>
]]></description><pubDate>Fri, 10 Apr 2026 21:01:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47723617</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47723617</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47723617</guid></item><item><title><![CDATA[New comment by WorldMaker in "Model-Based Testing for Dungeons & Dragons"]]></title><description><![CDATA[
<p>D&D is a bit like Monopoly in that very few people play by the rules as written and instead most tables play by a semi-unique/regional subset of the rules and with a mixture of house rules and DM preferences. Especially people who have been playing for years, not only have they had more time to house rule and build DM opinions, but they also may have seen multiple versions of the rules over that time and interacted with a wider variety of other tables.<p>To some extent, this is weirdly a good thing: if you want strictly enforced rules, you may just want to play a videogame instead. D&D succeeds best as a social lubricant enabling a framework in which social gaming (<i>roleplaying</i>) can happen to be "fun". Rarely is strictly following rules "fun", especially socially with friends; the rules in D&D are meant to be guideposts and tools for enough structure that people that want structure find comfort and enough flexibility that "fun" isn't lost in the process.<p>Which is a long way to say that you probably aren't going to learn the right lessons from a well fuzzed computer spec of the rules, you probably are going to learn more lessons asking the people you play with what rules they find important, to explain things you feel you don't understand, and to suggest which chapters in which books to try to read to best improve your understanding for that group. At the end of the day, if the table seems too hard to play at you might also just be playing with the wrong group, especially if you aren't having fun.</p>
]]></description><pubDate>Fri, 10 Apr 2026 15:55:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=47720033</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47720033</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47720033</guid></item><item><title><![CDATA[New comment by WorldMaker in "Union types in C# 15"]]></title><description><![CDATA[
<p>I think there is an architectural problem, but not where you seem to be expecting it to be. I got caught up in some low level distro nonsense+drama from smashing my head against horrors deep in autoconf in automake and got a deep look into the realm of the Distribution Maintainer lifestyle and how much Linux distributions <i>are</i> individual snowflakes despite presumably all being the same OS. As the old joke goes "the only stable ABI on Linux is Win32".<p>.NET has a huge kitchen sink standard library. Maybe the closer parallel is Python and Python has had periods where it only supported a few named distributions, too. That's not currently the case, but "how the sausage is made" is still a lot grosser than you might expect, with some Distribution Maintainers maintaining entire forks and a lot of the work not done by Python directly. Python is everywhere because it became one of the favorite shell scripting languages of Distribution Maintainers. (Which also exacerbated the Python 2 to 3 migration because entire distros got stuck on 2 while all their shell scripts got rewritten.) (But also if you want to compare Java's cross platform to .NET's I think we need a long digression into how many Java runtimes there are and the strange and subtle incompatibilities of different distro's affiliations to one or another. I also made the mistake of trying to use a Java application as a regular application in my youth of accidentally dealing with deep distro incompatibilities. That was also not fun.)<p>I get it, you don't have to like .NET. I just think you have an inflated view of what "cross platform" means when it comes to Linux. Linux isn't just one platform. Most things are rebuilt from source constantly because the binary interfaces especially libc's/glibc's under them are constantly shifting like quicksand. See also the messes that are Flatpak and Snap and how much work they've done to try to build around distro incompatibilities (by building increasingly more complex wish-it-were-VMs).</p>
]]></description><pubDate>Thu, 09 Apr 2026 21:16:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=47710253</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47710253</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47710253</guid></item><item><title><![CDATA[New comment by WorldMaker in "C# in Unity 2026: Writing more modern code"]]></title><description><![CDATA[
<p>> - There is no unsafe block, instead certain operations are "restricted", which currently causes them to emit warnings that can be suppressed on a per-module basis; it seems the warnings will turn into exceptions in the future<p>Which sounds funny because C# effectively has gone the other direction. .NET's Code Access Security (CAS) used to heavily penalize unsafe blocks (and unchecked blocks, another relative that C# has that I don't think has a direct Java equivalent), limiting how libraries could use such blocks without extra mandatory code signing and permissions, throwing all sorts of weird runtime exceptions in CAS environments with slightly wrong permissions. CAS is mostly gone today so most C# developers only ever really experience compiler warnings and warnings-as-errors when trying to use unsafe (and/or unchecked) blocks. More libraries can use it for low level things than used to. (But also fewer libraries need to now than used to, thanks to Memory<T>/Span<T>.)<p>> There is no "fixed" statement and frankly nothing like it all, native code is just not allowed to access managed memory period; instead, you set up an arena to be shared between managed and native code<p>Yeah, this seems to be an area that .NET has a lot of strengths in. Not just the fixed keyword, but also a direct API for GC pinning/unpinning/locking and many sorts of "Unsafe Marshalling" tools to provide direct access to pointers into managed memory for native code. (Named "Unsafe" in this case because they warrant careful consideration before using them, not because they rely on unsafe blocks of code.)<p>> MemorySegment is kinda like Memory<T>/Span<T> but harder to actually use because Java's type-erased generics are useless here<p>It's the ease of use that really makes Memory<T>/Span<T> shine. It's a lot more generally useful throughout the .NET ecosystem (beyond just "foreign function interfaces") to the point where a large swathe of the BCL (Base Class Library; standard library) uses Span<T> in one fashion or another for easy performance improvements (especially with the C# compiler quietly preferring Span<T>/ReadOnlySpan<T> overloads of functions over almost any other data type, when available). Span<T> has been a "quiet performance revolution" under the hood of a lot of core libraries in .NET, especially just about anything involving string searching, parsing, or manipulation. Almost none of those gains have anything to do with calling into native code and many of those performance gains have also been achieved by <i>eliminating</i> native code (and the overhead of transitions to/from it) by moving performance-optimized algorithms that were easier to do unsafely in native code into "safe" C#.<p>It's really cool what has been going on with Span<T>. It's really wild some of the micro-benchmarks of before/after Span<T> migrations.<p>Related to the overall topic, it's said Span<T> is one of the reasons Unity wants to push faster to modern .NET, but Unity still has a ways to go to where it uses enough of the .NET coreclr memory model to take real advantage of it.</p>
]]></description><pubDate>Thu, 09 Apr 2026 19:44:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47708763</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47708763</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47708763</guid></item><item><title><![CDATA[New comment by WorldMaker in "C# in Unity 2026: Writing more modern code"]]></title><description><![CDATA[
<p>The third bullet is also presumably referring to C#'s ancient wider support for unsafe { } blocks for low level pointer math as well as the modern tools Span<T> and Memory<T> which are GC-safe low level memory management/access/pointer math tools in modern .NET. Span<T>/Memory<T> is a bit like a modest partial implementation of Rust's borrowing mechanics without changing a lot of how .NET's stack and heap work or compromising as much on .NET's bounds checking guarantees through an interesting dance of C# compiler smarts and .NET JIT smarts.</p>
]]></description><pubDate>Thu, 09 Apr 2026 17:09:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47706285</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47706285</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47706285</guid></item><item><title><![CDATA[New comment by WorldMaker in "C# in Unity 2026: Writing more modern code"]]></title><description><![CDATA[
<p>A lot of C#'s reputation for not being viable for Linux came from the other direction and a lot of FUD against Mono. There were a lot of great Linux apps that were Linux first and/or Linux only (often using Gtk# as UI framework of choice) like Banshee and Tomboy that also had brief bundling as out-of-the-box Gnome apps in a couple of Linux distros before anti-Mono backlash got them removed.<p>Also, yeah today Linux support is officially maintained in modern .NET and many corporate environments are quietly using Linux servers and Linux docker containers every day to run their (closed source) projects. Linux support is one of the things that has saved companies money in running .NET, so there's a lot of weird quiet loyalty to it just from a cost cutting standpoint. But you don't hear a lot about that given the closed-source/proprietary nature of those projects. That's why it is sometimes referred to as "dark matter development" from "dark matter developers", a lot of it is out there, a lot of it doesn't get noticed in HN comments and places like that, it's all just quietly chugging along and doesn't seem to impact the overall reputation of the platform.</p>
]]></description><pubDate>Thu, 09 Apr 2026 17:01:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47706183</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47706183</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47706183</guid></item><item><title><![CDATA[New comment by WorldMaker in "C# in Unity 2026: Writing more modern code"]]></title><description><![CDATA[
<p>One take on it is that yes, the single dot operator was an ancient mistake which is why so many programming language features are about making it smarter. Properties as mentioned in this article are an ancient way to fake the dot operator into a "field" but actually make method calls. Modern C# also picked up the question dot operator (?.) for safer null traversal and the exclamation dot operator (!. aka the "damnit operator" or "I think I know what I'm doing operator") for even less safe null traversal.</p>
]]></description><pubDate>Thu, 09 Apr 2026 16:48:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47705976</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47705976</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47705976</guid></item><item><title><![CDATA[New comment by WorldMaker in "C# in Unity 2026: Writing more modern code"]]></title><description><![CDATA[
<p>Most .NET projects that Linq originally targeted ran in so called "Server" and/or "Workstation" GCs (.NET has had very generic public names for its GCs for a long time which were also somewhat misnomers because even some Desktop apps would run in "Server" GC and it was possible for vice versa [0]) where allocations were cheap, garbage collection was relatively cheap (because both GCs were multi-generational, had strong [but different] tuning for their generations, etc).<p>Unity inherited a much simpler Boehm GC from Mono. Under a (single generation) Boehm GC allocations are a bit more expensive and garbage collection sometimes a lot more expensive. (A Boehm GC was much easier for C++ engine code to understand/interact with, which is also part of why the .NET modernization project for Unity got so complicated and still has such a ways to go left.)<p>[0] Fun aside: in fact, modern docker advice for .NET is to switch "server applications" to use "Workstation GC" if you need to stack multiple containers on the same host because of differences in expected memory usage.</p>
]]></description><pubDate>Thu, 09 Apr 2026 16:40:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47705878</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47705878</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47705878</guid></item><item><title><![CDATA[New comment by WorldMaker in "Union types in C# 15"]]></title><description><![CDATA[
<p>> In my experience it does not work very well outside of the sanctioned Linux distributions. Quirky heisenbugs and nonsensical crashes made it virtually unusable for me on Void. I doubt that's changed in the years that have since passed.<p>It's open source. Did you follow the spirit of Linux to file a bug report of as much sense of the crashes as you could make? Most OSS only supports as many distros as people are willing to test and file accurate bug reports (and/or scratch the itch themselves and solve it). It seems a bit unfair to expect .NET to magically have a test matrix including every possible distro when almost nothing else does. (It's what keeps distro maintainers employed, testing other people's apps, too.)<p>It probably has gotten better since then, for what it is worth. .NET has gotten a lot of hardening on Linux and a lot of companies are relying on Linux servers for .NET apps now.<p>At the very least there are very tiny Alpine-based containers that run .NET considerably well and are very well tested, so Docker is always a strong option for .NET today no matter what Linux distro you want on the "bare metal" running Docker.</p>
]]></description><pubDate>Wed, 08 Apr 2026 20:37:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47695929</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47695929</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47695929</guid></item><item><title><![CDATA[New comment by WorldMaker in "Union types in C# 15"]]></title><description><![CDATA[
<p>> C# is a language that serves many masters and if you trace the origin of its featureset, you can see why each was created. Take the `dynamic` keyword: created to support interfacing with COM interop easier.<p>VB.NET's Object <i>was</i> created to support interfacing with COM interop easier. VB.NET's one key niche versus C# for many early years was COM interop through Object.<p>C#'s dynamic keyword was more directly added as a part of the DLR (Dynamic Language Runtime aka System.Dynamic) effort spurred by IronPython. It had the side benefit of making COM interop easier in C#, but the original purpose was better interop with IronPython, IronRuby, and any other DLR language. That's also why under the hood C#'s dynamic keyword supports a lot of DLR complexity/power. You can do a lot of really interesting things with `System.Dynamic.IDynamicMetaObjectProvider` [1]. The DLR's dependency on `System.Linq.Expressions` also points out to how much further in time the DLR was compared to VB.NET's Object which was "just" the VB7 rename of VB6 Variant originally (it did also pick up DLR support).<p>The DLR hasn't been invested into in a while, but it was really cool and a bit of an interesting "alternate universe" to still explore.<p>[0] <a href="https://learn.microsoft.com/en-us/dotnet/api/system.dynamic.idynamicmetaobjectprovider?view=net-9.0" rel="nofollow">https://learn.microsoft.com/en-us/dotnet/api/system.dynamic....</a></p>
]]></description><pubDate>Wed, 08 Apr 2026 20:30:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=47695858</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47695858</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47695858</guid></item><item><title><![CDATA[New comment by WorldMaker in "IPv6 is the only way forward"]]></title><description><![CDATA[
<p>The only place the IPv6 transition seems to be failing is in "command-and-control" corporate networks. (A majority of home/consumer/cellular users are quietly using IPv6 by default every day, per most statistics.) The lessons to be learned there don't seem to be technical but economic incentives.<p>Big companies believe that they have plenty of IPv4 space, especially because they've always been lax in how they read IPv4 RFCs and use IPv4 routing behind corporate firewalls. Big companies also have the most cash to buy IPv4 blocks as they go to auction. Big companies have massive firewalls and strict VPNs which also insulate them from IPv4 scarcity.<p>IPv4 leases don't impact enough companies' bottom lines today that they need to assess IPv6 support.<p>Solving those economic incentive problems would likely be a massive sociopolitical problem: you would need IANA and the RIRs to agree to inflate costs in various ways (and in the short term that might have done a <i>lot</i> of harm to small countries already facing IPv4 inequity and their RIRs that lost the very earliest IPv4 assignment lotteries). You'd probably need new RFCs and political enforcement to support things like "taxing" company to company IPv4 block assignments. You'd probably need collusion or regulation from the big "Cloud Providers" to enforce higher costs on IPv4-only networking.<p>It would take those kind of "strong handed" tactics to speed up IPv6 adoption in corporate networks. Waiting for the "invisible hand" of the "free market" can be very <i>slow</i> and takes patience. That's mostly what we've been seeing with IPv6 adoption: the "invisible hand" is a lot slower than some people predicted. Especially engineers that hoped technical superiority alone would be a market winner.</p>
]]></description><pubDate>Wed, 08 Apr 2026 15:36:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47691687</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47691687</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47691687</guid></item><item><title><![CDATA[New comment by WorldMaker in "IPv6 is the only way forward"]]></title><description><![CDATA[
<p>You are looking for mDNS which is the modern name for zeroconf/Bonjour/etc. The URL suffix is .local (storage.local, myphone.local, myprinter.local). Most modern OSes support it out of the box, but also don't advertise their names on mDNS until you ask them nicely (travel through a maze of Settings and Firewall options).<p>mDNS supports IPv6 just fine/works on IPv6 only LANs.<p><a href="https://en.wikipedia.org/wiki/Multicast_DNS" rel="nofollow">https://en.wikipedia.org/wiki/Multicast_DNS</a></p>
]]></description><pubDate>Wed, 08 Apr 2026 15:23:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=47691505</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47691505</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47691505</guid></item><item><title><![CDATA[New comment by WorldMaker in "IPv6 is the only way forward"]]></title><description><![CDATA[
<p>SLAAC isn't something that is an inevitable consequence of increasing address size, it's something that is a useful <i>advantage</i> of increasing address size. Almost no one had big enough blocks in IPv4 where "just choose a random address and as long as no else seems to be currently claiming it it is yours" was a viable strategy for assigning an address.<p>There are some nice benefits of SLAAC over DHCP such as modest privacy: if device addresses are randomized they become harder to guess/scan; if there's not a central server with a registration list of every device even more so (the first S, Stateless). That's a great potential win for general consumers and a far better privacy strategy than NAT44 accidental (and somewhat broken) privacy screening. It's at odds with corporate device management strategies where top-down assignment "needs to be the rule" and device privacy is potentially a risk, but that doesn't make SLAAC a bad idea as it just increases the obvious realization that consumer needs and big corporate needs are both very different styles of sub-networks of the internet and they are conflicting a bit. (Also those conflicting interests are why consumer equipment is leading the vanguard to IPv6 and corporate equipment is languishing behind in command-and-control IPv4 enclaves.)</p>
]]></description><pubDate>Wed, 08 Apr 2026 15:13:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47691365</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47691365</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47691365</guid></item><item><title><![CDATA[New comment by WorldMaker in "IPv6 is the only way forward"]]></title><description><![CDATA[
<p>It also seems to be a learning curve thing because IPv6 addresses have their own versions of memorable mnemonics. If you are in a LAN space manually configuring LAN addresses, you just need to remember one of the local address (ULA) prefixes like fc00 and then start numbering your devices as ::1 and incrementing (fc::1, fc::2, fc::3, etc). But also in LAN spaces you could just rely on mDNS (devicename.local), it's gotten quite good in most OSes today.<p>If you need to remember random WAN IPv6 addresses without being able to use DNS or at least a hosts file you've probably got a bunch of other more pressing problems.</p>
]]></description><pubDate>Wed, 08 Apr 2026 14:56:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47691122</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47691122</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47691122</guid></item><item><title><![CDATA[New comment by WorldMaker in "Blackholing My Email"]]></title><description><![CDATA[
<p>I've started to question if GMail's spam folder is marketing more than substance. I've used the same primary email address for nearly the same number of decades. The time I saw the "most" spam in a spam folder was only while it was hosted on Google Workspace. Actually trying to skim through those "1000s per day" a lot of them seemed suspect in strange ways (why was this even delivered anywhere?) and some of them even seemed like Google just dumping random ad copy from legitimate search ads into the folder.<p>(Also it says a lot that right now my two biggest sources of daily spam are Google Calendar Notifications and Random Firebase Accounts. Both of those further leave me questioning if Google's approach to spam filtering is sincere.)</p>
]]></description><pubDate>Tue, 07 Apr 2026 17:07:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=47678347</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47678347</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47678347</guid></item><item><title><![CDATA[New comment by WorldMaker in "Blackholing My Email"]]></title><description><![CDATA[
<p>RCS is incredibly centralized. More than half of the phone carriers decided it was too complicated to run their own RCS servers and so just sub-contract them to a Google subsidiary (Jibe).</p>
]]></description><pubDate>Tue, 07 Apr 2026 16:57:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47678235</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47678235</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47678235</guid></item><item><title><![CDATA[New comment by WorldMaker in "Microsoft hasn't had a coherent GUI strategy since Petzold"]]></title><description><![CDATA[
<p>> .NET at least allowed self-signed certs.<p>The GAC and certain CAS configurations would require paid certificates, too. Certainly the requirement of paid certificates can be seen as a part of how both of those eventually fell out of favor. That is another of the things I felt UWP missed learning from .NET. Developers do generally dislike code signing certificates and try to avoid them.<p>Also to be fair, UWP had a rather streamlined certificate system if you targeted only the Store and let the Store manage your certificate chain. It was even a little bit easier to use than Apple's similar App Store management of XCode certificates. Not that that was a high bar to clear.<p>> It was also not a good look that Microsoft's own flagship applications like Visual Studio and Office did not show any progress toward adopting UWP<p>There was some progress. Office involves a lot of teams working at different paces and sometimes extremely different codebases. OneNote was fully UWP for a while and was at one point considered a flagship and testbed for UWP "Fluent Design" (both before and after the shift from touch-first to the over-correction to "it's just a desktop framework that sometimes is touch friendly"). Several new Office apps were written UWP first, including the "Office Hub" app that became called just "Office" and now is even more confusing called "Microsoft Copilot 365 app". "Outlook (New)" has always been React Native, but as a React Native project, it ran entirely in UWP, too, for a while. It was said to have been one of the drivers for deep UWP support in React native at the time. There were also the React Native-based Word, Excel, and PowerPoint "mini" versions that ran entirely in UWP. Those are said to have influenced more of the real codebases pushing towards React Native, but did not try to replace the original codebases in the same way that "Outlook (New)" today is overtaking "Outlook (Classic)".<p>There were a lot of strategy problems with UWP, but adoption was further along in some areas than it looked.</p>
]]></description><pubDate>Tue, 07 Apr 2026 14:31:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47676010</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47676010</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47676010</guid></item><item><title><![CDATA[New comment by WorldMaker in "Microsoft hasn't had a coherent GUI strategy since Petzold"]]></title><description><![CDATA[
<p>Those are some good points, and I especially loved that lifecycle management in the era where I used a lot of Windows 8 apps. Even on a Desktop with apps filling up my screen still seeing some of them pinned to 0% CPU most of the time (while I'm multi-tasking) in Task Manager was a delightful magic. I also agree that was one of the best parts of the UWP sandbox and one of the biggest shames when Microsoft had to figure out how to allow sandbox breaks that they couldn't find a way to make the lifecycle and other smarts parts of the sandbox more opt-out by default rather than "opt back into the full sandbox". Of course needing to opt-out by default was one of the reasons developers hated the sandbox in the first place. It's a marketing challenge no matter how you slice it.<p>That relates to some of my criticism that maybe UWP could have used more .NET veterans because that was one of the problems with the CAS sandbox. For the most part the CAS sandbox was "opt-in" and yeah software developers through ego, hubris, and everything else will most often declare "my app/library is a special snowflake and needs access to everything!" So even if things opt-in to additional security controls like CAS, no one <i>tests</i> or builds for Production in a CAS sandbox so even things that claimed to support CAS threw runtime exceptions all over the place to the point no one could trust CAS to the point were CAS died for being practically useless overhead because no one both opted in <i>and</i> knew how to test it.<p>UWP had a lot of good ideas. It's insistence that it didn't have much to learn from .NET's mistakes was not one of them.</p>
]]></description><pubDate>Mon, 06 Apr 2026 18:52:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47665187</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47665187</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47665187</guid></item><item><title><![CDATA[New comment by WorldMaker in "Microsoft hasn't had a coherent GUI strategy since Petzold"]]></title><description><![CDATA[
<p>Package Identity isn't that different from Signed COM Registration of the ancient past. Microsoft built up a lot of dislike from it by building it "sandbox-first", but the core of it still isn't that different from COM's ancient footpaths, at least to the COM diehards that hate .NET and didn't learn near enough from .NET's battles with the same things in terms of package signing, CAS (Code Access Security), and the GAC (Global Assembly Cache).<p>"Sandbox-first" even made some sense as a direction to work because it <i>is</i> harder to add a sandbox after the fact than to start with one, which is one of the core lessons learned from XP trying to sandbox some of the insecurities in Win32 and getting caught in a lot of complications. (The "sandbox-first" of UWP wasn't even that different under the hood from the XP "sandbox" of Folder/Registry Redirection, just a little better hardened.) Microsoft needed a lot better messaging up front if they had expected to allow more apps to leave the sandbox eventually. But Microsoft probably did believe the UWP sandbox was a better and safer experience for consumers.<p>But yeah, what's left of Package Identity outside of the sandbox feels like it includes several classic mistakes from .NET's CAS/GAC era, and also seems to point out that Sinofsky was wrong about WinRT "respecting the past" when it failed to learn from that era because it didn't trust .NET's history.</p>
]]></description><pubDate>Mon, 06 Apr 2026 15:54:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47662564</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47662564</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47662564</guid></item><item><title><![CDATA[New comment by WorldMaker in "Microsoft hasn't had a coherent GUI strategy since Petzold"]]></title><description><![CDATA[
<p>I think for Sinofsky the "respecting the past" refers more to WinRT was/is still just Spicy COM under the hood. Most of the article as I read it is about how .NET was a mistake for Windows UI development and a return to (Spicy) COM its savior.</p>
]]></description><pubDate>Mon, 06 Apr 2026 04:09:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47656891</link><dc:creator>WorldMaker</dc:creator><comments>https://news.ycombinator.com/item?id=47656891</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47656891</guid></item></channel></rss>