<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: cyphar</title><link>https://news.ycombinator.com/user?id=cyphar</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 02 Aug 2026 02:07:32 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=cyphar" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by cyphar in "Golang proposal: container/: generic collection types"]]></title><description><![CDATA[
<p>That is the classic answer for how to do that in pre-generics Go. It doesn't solve the problem I mentioned.</p>
]]></description><pubDate>Sat, 01 Aug 2026 12:12:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=49133739</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49133739</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49133739</guid></item><item><title><![CDATA[New comment by cyphar in "Golang proposal: container/: generic collection types"]]></title><description><![CDATA[
<p>In Rust this is solved by defining a local trait and methods implemented for a trait are only available if the trait is imported. This is in contrast to Go where methods are not namespaced at all. But there are almost certainly many other ways of solving the problem.<p>I was a little surprised how often I ran into this issue when using libraries that started defining structures as generic containers.</p>
]]></description><pubDate>Sat, 01 Aug 2026 03:19:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=49130738</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49130738</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49130738</guid></item><item><title><![CDATA[New comment by cyphar in "Golang proposal: container/: generic collection types"]]></title><description><![CDATA[
<p>I've maintained one of the major container runtimes (which is written in Go) for over a decade as well, I think I have a less rosy view of Go than you but I still think it's a nice language all things considered and still use it for some projects.</p>
]]></description><pubDate>Fri, 31 Jul 2026 20:41:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=49128293</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49128293</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49128293</guid></item><item><title><![CDATA[New comment by cyphar in "Golang proposal: container/: generic collection types"]]></title><description><![CDATA[
<p>On the other hand, design decisions made under one set of constraints can become problematic when you add new features that don't play as well with earlier design decisions.<p>For a concrete example, the fact you cannot define custom methods for external types in Go (a pre-1.0 design decision) means that you cannot write proper compile-time generic code to deal with some generic wrapping type (dumb example -- getting a sum of the perimeters of a generic set of shapes in an externally-defined collection type) -- you are forced to work around it with runtime type-switching. There are all sorts of arguments you can make about simplicity but this is an objective shortcoming of Go that is directly caused by generics being added to Go long post 1.0.<p>My take on this is that despite selfishly wanting more from Go for many years myself, adding more stuff to Go at this late stage is just slowly chipping away at Go's uniqueness with features that make a large number of people using them unhappy. (For example, while they make some APIs nicer, iterators turn a basic logic bug that is impossible with for loops -- forgetting to stop iterating when the loop has a "break" -- into a runtime panic. And they really suck to compose.)</p>
]]></description><pubDate>Fri, 31 Jul 2026 20:12:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=49128029</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49128029</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49128029</guid></item><item><title><![CDATA[New comment by cyphar in "The most official water costs $120k a gallon"]]></title><description><![CDATA[
<p>For more context, sample reference materials from the NIST reference catalogue are not meant to be exceptionally high purity examples of the sample -- SRMs are usually commercially-produced products. The real value is that each sample comes with a datasheet with incredibly detailed and accurate measurements that are (as you said) used for calibration of measuring devices in industrial settings. To quote a Veritasium video about the topic from a few years ago[1], "the thing you're paying for is not the peanut butter, it's the knowledge of exactly what is in the peanut butter".<p>[1]: <a href="https://youtu.be/esQyYGezS7c?t=226" rel="nofollow">https://youtu.be/esQyYGezS7c?t=226</a></p>
]]></description><pubDate>Fri, 31 Jul 2026 18:45:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=49127095</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49127095</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49127095</guid></item><item><title><![CDATA[New comment by cyphar in "GDID Windows – Cut the tracker that follows you even under VPN"]]></title><description><![CDATA[
<p>It's hard to do a 1-to-1 comparison but if the telemetry also used a masked form of the machine-id with an application ID unique for the telemetry service then you wouldn't be able to correlate them directly.<p>To be clear, I think this whole story stinks but the issue here is not that OS installations have unique identifiers (machines have lots of unique identifiers -- hardware MAC addresses, peripheral composition and device IDs, screen resolution) -- it's that Windows has an auto-enabled spyware^Wtelemetry system that shares enough data for them to be able to provide that kind of data to law enforcement. This would be a privacy nightmare even in the absence of a unique OS installation identifier. Heck, they could even take regular screenshots of your screen but that would be too obvious[1].<p>[1]: <a href="https://en.wikipedia.org/wiki/Windows_Recall" rel="nofollow">https://en.wikipedia.org/wiki/Windows_Recall</a></p>
]]></description><pubDate>Mon, 27 Jul 2026 08:00:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=49066452</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49066452</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49066452</guid></item><item><title><![CDATA[New comment by cyphar in "GDID Windows – Cut the tracker that follows you even under VPN"]]></title><description><![CDATA[
<p>On most distributions I've seen, SELinux is configured to automatically label /proc files with labels based on fairly granular roles, so that setup already exists.<p>If you want to completely remove the global information in /proc you can do so by mounting it with subset=pid (and extra points for hidepid=4). This was added to improve container runtime security but unfortunately a lot of programs still depend on reading global procfs files so we can't enable it by default.<p>As for why all this information exists in /proc, procfs has historically been a bit of a dumping ground. There is an argument for "everything is a file" and so on, but having had to deal with all sorts of insane bugs related to procfs I'm less sympathetic to that argument than I used to be.<p><i>> There is also a catch that the program can create a new unprivileged user namespace and mount /proc there thus bypassing my daemon completely. Anyone can create a user namespace nowadays.</i><p>There actually are some restrictions, if the process doesn't have access to an unmasked procfs mounting /proc will fail, though a recent patch[1] finally made it so that subset=pid works in this case. (And most sandboxes disallow unprivileged CLONE_NEWUSER with seccomp.)<p>[1]: <a href="https://lore.kernel.org/linux-fsdevel/cover.1626432185.git.legion@kernel.org/" rel="nofollow">https://lore.kernel.org/linux-fsdevel/cover.1626432185.git.l...</a></p>
]]></description><pubDate>Mon, 27 Jul 2026 04:43:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=49065271</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49065271</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49065271</guid></item><item><title><![CDATA[New comment by cyphar in "GDID Windows – Cut the tracker that follows you even under VPN"]]></title><description><![CDATA[
<p>It should be noted that the "correct" usage of /etc/machine-id is that you use it in a way that doesn't allow cross-correlation between different applications by using a HMAC of the machine-id with an application-specific UUID instead of using it directly. systemd-id128 has a command line flag to do this for you.<p>Whether everyone does that correctly, that's a different question. On the other hand, while developers should be more careful about how they use identifiers like this, if an application on your machine wants to track you they don't need /etc/machine-id.</p>
]]></description><pubDate>Sat, 25 Jul 2026 20:58:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=49051501</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49051501</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49051501</guid></item><item><title><![CDATA[New comment by cyphar in "Building on ATProto"]]></title><description><![CDATA[
<p>Most games are not perfect information games. How would you implement poker?</p>
]]></description><pubDate>Sat, 25 Jul 2026 16:51:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=49049206</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49049206</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49049206</guid></item><item><title><![CDATA[New comment by cyphar in "Firefox Containers Preview"]]></title><description><![CDATA[
<p>Facebook uses more advanced fingerprinting techniques than just cookies, even a few data points like IP address, User-Agent, and screen-size probably uniquely identify you and let them cross-correlate you between containers.<p>If you want actual anonymity you need to use something like the Tor Browser (which does lots of tricks to try to block fingerprinting as well as using a unique Tor circuit for every website you access).</p>
]]></description><pubDate>Sat, 25 Jul 2026 03:38:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=49044279</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49044279</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49044279</guid></item><item><title><![CDATA[New comment by cyphar in "FreeInk: Open ecosystem for e-readers"]]></title><description><![CDATA[
<p>Breaking any kind of DRM (or writing, distributing, or using software that does so) violates section 1201 of the DMCA[1]. The maximum penalty for a violation is $500k and up to 5 years in prison. There are some token exemptions but none would apply in this case.<p>Ethically it's all completely bunk, but more people should be aware how insane modern copyright laws are so that we can reform them. And this is not new, folks like the FSF and EFF protested the signing of the 1996 WIPO Treaty too.<p>[1]: <a href="https://www.law.cornell.edu/uscode/text/17/1201" rel="nofollow">https://www.law.cornell.edu/uscode/text/17/1201</a></p>
]]></description><pubDate>Wed, 22 Jul 2026 17:12:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=49010041</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=49010041</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49010041</guid></item><item><title><![CDATA[New comment by cyphar in "Claude Fable produced a counterexample to the Jacobian Conjecture"]]></title><description><![CDATA[
<p>I don't think the (fairly factual) description of these systems as stochastic parrots means that they will never do useful work, just that they are not intelligent in the way we believe animals to be (to "push back" on your anecdata, I've also heard fewer people claiming that LLMs are actually conscious in the past year -- maybe we're reaching the happy medium?). That was the point the stochastic parrots paper and Chinese room thought experiments were making -- nobody claimed that the man in the Chinese room would be unable to accurately translate Chinese text.<p>Fuzzers are another kind of stochastic generator but nobody would claim they don't do useful work in a way that is hard to replicate through deterministic methods. (I still find the code these models produce kind of awful, but advancements in harnesses do mean that they can finally produce code that works most of the time.)</p>
]]></description><pubDate>Mon, 20 Jul 2026 04:15:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48974278</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=48974278</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48974278</guid></item><item><title><![CDATA[New comment by cyphar in "TS-2026-009: Insecure argument handling in Tailscale SSH permitted root access"]]></title><description><![CDATA[
<p>They actually do use "os/user".Lookup() as a fallback if fetching via getent(1) fails, so they might be using NSS modules to dynamically define users and then not linking their binaries with glibc (musl and the opt-in pure-Go implementation of "os/user".Lookup() do not support NSS).<p>Still, requesting the information from systemd-userdb would be a better way of doing this if it's really necessary.<p>EDIT: Yeah, some older comments confirm that was their reasoning. <a href="https://github.com/tailscale/tailscale/commit/1fc1077052dfa77e0efc7b5b308ead5e5e3e1965" rel="nofollow">https://github.com/tailscale/tailscale/commit/1fc1077052dfa7...</a></p>
]]></description><pubDate>Thu, 16 Jul 2026 04:14:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48930251</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=48930251</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48930251</guid></item><item><title><![CDATA[New comment by cyphar in "TS-2026-009: Insecure argument handling in Tailscale SSH permitted root access"]]></title><description><![CDATA[
<p>Indeed, but they did have code to use "os/user".Lookup() in a fallback path so I wonder if the issue is that they have some NSS module for user definitions (which wouldn't work with osusergo/static or musl-linked binaries)?<p>If so, this is kind of an understandably ugly problem, though there is still a better option than shelling out -- systemd-userdb.</p>
]]></description><pubDate>Wed, 15 Jul 2026 15:33:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48922425</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=48922425</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48922425</guid></item><item><title><![CDATA[New comment by cyphar in "TS-2026-009: Insecure argument handling in Tailscale SSH permitted root access"]]></title><description><![CDATA[
<p>In my experience it is really very quick and easy to get a CVE if you contact MITRE directly, and on paper you do not need to disclose too much. The <i>GitHub</i> CNA is (ironically) very slow by comparison but that is a GitHub issue.<p>Tailscale can also just apply to be their own CNA and issue CVEs for their products themselves, eliminating any such issues entirely.</p>
]]></description><pubDate>Wed, 15 Jul 2026 15:21:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=48922243</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=48922243</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48922243</guid></item><item><title><![CDATA[New comment by cyphar in "TS-2026-009: Insecure argument handling in Tailscale SSH permitted root access"]]></title><description><![CDATA[
<p>As an open source maintainer of a fairly large project, we get reports from Ada Logics and similar firms every once in a while and those are absolutely not the same as a proper security audit (which we've also had commissioned in the past). Reports are just a description of a particular issue, not the deeper analysis of the general structure of the codebase that you get from a good audit.</p>
]]></description><pubDate>Wed, 15 Jul 2026 15:11:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=48922061</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=48922061</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48922061</guid></item><item><title><![CDATA[New comment by cyphar in "Show HN: Make senders work to get into your inbox"]]></title><description><![CDATA[
<p>djb proposed Internet Mail 2000 back in the early 2000s as an attempt to solve this kind of problem without micropayments[1].<p>As others have said, a lot of the useful emails I get are still ones where the sender probably wouldn't have paid to send them. IM2000's fairly old-school-yet-elegant approach would probably lead to a better outcome too.<p>[1]: <a href="http://cr.yp.to/im2000.html" rel="nofollow">http://cr.yp.to/im2000.html</a></p>
]]></description><pubDate>Wed, 15 Jul 2026 13:02:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48920220</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=48920220</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48920220</guid></item><item><title><![CDATA[New comment by cyphar in "Japan develops a method to recover up to 90% of lithium from used EV batteries"]]></title><description><![CDATA[
<p>It really should not be surprising that we can get very high recovery percentages from batteries -- we do not mine elemental lithium, so the processes we use for extraction are already designed to extract lithium from fairly low-purity sources. In contrast, lithium batteries are an incredibly high-purity source of lithium. The main question is when it will become cost-effective to create recycling pipelines.<p>Lead acid batteries had a similar trajectory and modern lead acid batteries are effectively 100% recycled.</p>
]]></description><pubDate>Tue, 14 Jul 2026 04:09:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48902209</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=48902209</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48902209</guid></item><item><title><![CDATA[New comment by cyphar in "GhostLock, a stack-UAF that has existed in all Linux distributions for 15 years"]]></title><description><![CDATA[
<p>I am aware of the history behind Zones and Jails, but my point is still the same -- the (lack of) protection you get against kernel exploits should be the same because the only thing protecting you from escapes is kernel data structures.<p>(I've been one of the maintainers of runc -- the most widely use used container runtime on Linux -- for more than a decade, so I'm at least somewhat well-informed on the topic.)<p>The duct tape criticisms are fair when talking about other vulnerabilities (such as when container runtimes have misconfiguration or other inatomicity bugs) but not really here in the context of a kernel arbitrary code execution gadget. It also seems quite unlikely that the illumos kernel doesn't contain any of these kinds of bugs.</p>
]]></description><pubDate>Mon, 13 Jul 2026 22:26:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48899738</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=48899738</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48899738</guid></item><item><title><![CDATA[New comment by cyphar in "GhostLock, a stack-UAF that has existed in all Linux distributions for 15 years"]]></title><description><![CDATA[
<p>If there was a similar class of bug in the illumos kernel, it would also allow for a container escape, no?<p>There are many issues with the formulation of containers on Linux (though I think people overstate it whenever bugs like this happen) but ultimately this bug was a UAF that gave you arbitrary code execution in the kernel. Zone IDs are also just numbers in kernel memory... right?</p>
]]></description><pubDate>Mon, 13 Jul 2026 16:13:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=48894844</link><dc:creator>cyphar</dc:creator><comments>https://news.ycombinator.com/item?id=48894844</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48894844</guid></item></channel></rss>