Pretty sure that earlier work did reach the light of day in the form of a set of GL extensions.
Also, his other work on polar stroking influenced one of the gpu-accelerated path renderers in Skia (graphics library powering Chrome and Android, among other things). See e.g. https://source.chromium.org/chromium/chromium/src/+/main:thi... where they refer to the same idea as radial stepping, or radial edges. Or if not the exact same idea, it's at least a similar idea of stepping in angle-space rather than purely in Bezier t-space or arc-length parameterized space.
There's a big gap between WASM has issues/limitations, and WASM "might as well not exist." NaCL was also Chrome-only IIRC, whereas WASM is a successful web standard (no small feat).
NaCL was further along in every meaningful dimension (the ability to run native software at native speeds) after a year or two of development, than WASM is today after a decade (and I think this will be true a decade from now).
So the upside of WASM according to you, is that it got greenlit by the standards committee chaired by companies whose business model would've been hurt the most by a competent in-browser sandbox.
For example, the Epic-Apple Fortnite battle couldn't even have happened. Epic would've shipped it on NaCL and users would've been just as happy, and Apple (or Google) would've had no way of enforcing their sandox.
Whew, thankfully we've been saved from that terrible fate of getting to publish and enjoy software without gatekeepers and appstores.
At least I hope you have something to gain from your opinion, as the rest of us certainly lost out.
It seems like you know quite a bit of the history here. Were you involved in some way? If so, I'm curious to know why you think NaCL did not achieve broad adoption? And what's stopping the world from catching up to your line of thinking and adopting a NaCL successor?
Only as a developer using the technology, as part of a failed commercial venture.
> If so, I'm curious to know why you think NaCL did not achieve broad adoption?
NaCl had 2 limitations compared to WASM, the first one was a design philosophy difference:
Unlike WASM, it was designed to maximize compatibility with native code, so it had no ability to coexist in the same process with JS/DOM like WASM does. You had to put the code in an iframe, and talk to it via postMessage. WASM promised to be a better design, but a decade on, we can see it's missing most of those promised features, or said features are half-baked, and it has turned into one of the biggest NIH quests in modern computer science.
The second issue was that it worked through Chrome's plugin API, which has since been deprecated. You could sit down and standardize an API that's not chrome specific. The biggest piece of API surface the browser has is WebGL, and they essentially exposed OpenGL ES to the browser, which is identical to what PPAPI did.
Some APIs were much better, like audio just gave you a buffer to write into, compared to WebAudio, which aims to implement the whole processing pipeline via stringing together JS objects, and everybody seems to hate it.
> And what's stopping the world from catching up to your line of thinking and adopting a NaCL successor?
Theoretically nothing, but you'd have to fork Chrome, do the changes yourself, develop a spec and tooling and THEN ask browser vendors to standardize on your changes. If there was some soul who would undertake this task (maybe feasible with AI for a non-huge team?), combined with a strong awareness campaign to get committees to consider adoption. So it's a tall order in reality.
I also have to add, that I think that WASM is the wrong approach - basically I get what they were going for but they should've either merged the JS and WASM 'worlds' so that these 2 pieces of code can interact without any friction, and are handled by the same VM. This would've allowed things like gradually compiling a JS codebase to WASM.
Alternatively, the should've stuck with the NaCL approach of two separate, isolated worlds, with maximum compatibility and peformance for native code.
Portability isn't worth as much as it was advertised. There are a grand total of 2 relevant CPU architectures for consumers, ARM64 and x86_64. Shipping 2 binaries is just running the compiler twice.
On the client side, there's just a verifier, and then the runtime basically consists of branching to the first instruction and having at it. Near-native performance and instant startup, you can't do better than that.
PNaCL was proto-WebAssembly and suffering from the same issues. They actually shipped LLVM bytecode, and you had to compile the executable locally with the whole toolchain, leading to quite bad startup performance and a lot of baggage.
Turns out there's no such thing as portable VM assembly. You still have to ship a full compiler (well, JIT) and compile the WASM IR.
Browser vendors have spent uncountable amount of engineering resources on making yet another compiler (actually multiple, since afaik Chrome uses a tiered JIT for WASM), that's neither as good as the big boys, and neither as fast as just running the dang binary.
Linux distros are shipped as binaries yet you can still build them from source, and are certainly not controlled by one company, I don't see why that would be the case here.
Would you require every website to come with architecture-independent source code? What happens if it doesn't match the compiled binary? Or would the browser compile it every time?
The original premise of the argument was about WASM bytecode vs native assembly - bytecode is no more open or closer to the source code than x86 asm. Your questions are completely orthogonal to the argument, so please bring up relevant points.
> Just because you can do something well doesn't mean it's worth doing.
I'm not sure if there's more context to this quote, but on the surface: what a dismal take! Letting some measure of worth dictate what you do feels pretty limiting to me. I understand that he's not saying "make sure you attach worth to everything you do," but there's an implicit judgement process in what he's suggesting.
If you do something well, and you like doing that something, maybe you should enjoy doing it just for the sake of doing it.
I read it the opposite though; that it's the act of doing, not the (perfect) result, the thing that is valuable. e.g. it's better to paint a canvas badly because it's fun, than to have an AI generate a perfect image. It's not the image that is "well" that is worth it, it's you having fun while doing it that it's worth it.
I feel like you're conflating "having worth" (value) and "being worth doing" (it's good to do it) in here?
I know a few people who refuse to get jobs even though they are suffering financially because they can't find something they think is "worth" doing with their skill set.
I tried to tell them that having a job would mean they get to meet new people, they get to escape their financial despair, and that it would add structure and organization to their disheveled and disorganized lives. I explained that work itself has value for the worker outside of the simple return of the paycheck, the activity of being engaged completing a task having direct psychological impact on the task completer.
Both of their responses, taken months apart, boiled down to that if a day of work didn't make them so wealthy that they never had to work again it wasn't worth it for them.
I think your attempt at a counterpoint accidentally reinforced the main point: there are more criteria beyond simply being able to do something well that determine whether it's a good idea in the first place. I can make lead balloons faster and cheaper than anyone else but that's not enough to make it worth spending my one and only life making lead balloons.
Yes, and I even think this applies to generally valuable skills.
I can be really good at organizing projects, but I shouldn’t channel that into spending hours creating the perfect Jira template with 18 integrations just because I can do it well because that’s a lot of energy spent on something nobody may ever use.
Meanwhile that skill may very well be extremely valuable elsewhere.
True! And the point isn't that you shouldn't base whether you do something on how much economic value it produces.
I think the judgment is more that if you're doing something to produce some kind of outcome (e.g. work), don't get stuck on things that don't impact that outcome.
The point isn't that you shouldn't do things well. It's that just because AI makes it effortless to ship some random new thing nobody asked for, that doesn't mean you should ship it.
I think that calculus changes completely when you do things for fun, where the only outcome you're trying to produce is doing more of the activity.
If you're doing something for fun, the doing is itself the reward.
I don't think he's talking about personal fulfilment. His take is more simple. He's saying don't do the following: "I created a piece of software, and it works pretty good, but I have no customers. Should I work on coding to get it to work 5% better, or try to do some marketing? Well, I'm really, really great at coding, so let me do more of that."
I respectfully submit that your neat categorization of interactions into those three profiles may reflect a gap in your understanding of others. Namely, that your definition of what makes a "good faith" conversation may not be the only one, nor the only correct one.
The vibe that people care about - that's the unspoken channel in any conversation. Physical, emotional, thoughts that don't get said. Perhaps to the one you're talking to, a good faith conversation is one that cares about or prioritizes the vibes.
People are allowed to care about what they care about, I think you're right there.
My only point is that, for me, if I'm discussing a subject where I'm exasperated and am complaining in a questioning way, say (to take a random example):
>Why are my local supervisors are advocating and incentivizing return to office!?! Having to go into the office is pointless and terrible!
Suppose this policy seems insane to me, and I can only suggest that it is happening because my local politicians are corrupt jerks who only care about corporate interests.
But, now, suppose that someone in the conversation is a municipal finance nerd and believes that since dangerous local budget deficits are being driven by work from home policies, that city finances and looming cuts to important services might be what is pushing the return to office mandates, not is something the politicians want, but as a kind of compromise.
So, for me personally, I very much want this person to suggest new paradigm as an alternative explanation. I many not be satisfied with the explanation, but it has more explanatory power than "the politicians are crazy" theory that I currently hold.
I have found, however, that a huge number of folks that would pose these questions aren't actually looking for an explanation, they are just trying to express their frustration, and seek reassurance that they are in good company and are being heard. If that's what people want, I'm now happy to oblige them. I just don't understand why they would want that from the conversation, but to each their own.
I’m someone who operates in both modes on the receiving end, so I think I can answer some of this.
I’m going to come at it from a slightly different angle, but I think the spirit will get there.
Sometimes, I’ve been working on troubleshooting my PC for hours already. I’m tired. I’m angry because I’ve spent all that mental capital, etc., so I come to friends to rant a little bit.
And then they start offering solutions. Solutions I’ve definitely already tried. Solutions that don’t work for a multitude of reasons that I’m not expressing because, again, I already spent hours on this. But they keep blasting me with troubleshooting tips and “have you tried this yet?” and “what’s the text say in this folder?”
But I’m already at my wits end, and now they’re wanting me to keep pushing, to do more labor to solve the problem. A problem I don’t want solved. I just want someone to hear my struggle and go “that sucks man, let’s have a beer”.
For me, sometimes it’s “I’m out of spoons”, sometimes it’s “I just want someone to see *my* struggle, too”. Sometimes I want to be validated for my current plight.
And when I’m reached with solutions and/or explaining, at the wrong time, sometimes that can be very invalidating.
In circumstances like this, when I’m on the end where I want to be the fixer or the explainer, I’ll even ask, “do you want fixer me? Or just company?”
You don’t have to lie and say XYZ are bad for that; but you can instead say something like “oh yeah that sucks when you’re already doing all this elsewhere”. Because it does suck. Even if it has a logical reason, it does suck.
Edit: Okay, I want to add a bit more. When someone is stressed or exhausted to a high enough degree, they literally cannot range in new information, no matter how well-meaning. So sometimes the commiseration and/or presence without offering solutions is just one of many steps to help them relax enough that they can even *hear* the new thought or suggestion. As well-meaning as advice or a reality check can be in those situations, until the stress is reduced, it’s literally falling on deaf ears.
When I find myself feeling like that, a good reframe I like using is to turn those comments into commiseration; “What about trying A?” — “Yeah it’s f*ked aye, I tried A, B and C and it STILL didn’t work!”.
I usually ask people straight at that point whether they want solutions for me or if they just want me to listen with empathically.
Depends on the person how I bring this though, but it tends to work.
Why can't it be the other way around, you don't know that I am out of spoons too and rather than talk about why I am out spoons I should not be expected to validate other people's vibes or spoonfeed them... And so forth.
As an exhausted person the issue is not being given advice. It is being given wrong, ignorant, or inappropriate advice.
How does someone know what is wrong, ignorant, inappropriate advice without first finding out from you, through communication, what kind of state you’re in and what you’ve already tried.
And if the “listener” / fixer is in a state where they can’t do the work of finding out what kind of help and/or fixing is needed, then maybe *they* need to step back and have a break, too.
In my experience, fixers tend to completely miss the cues of “please stop word-vomitting at me, you’re not helping” and continue offering unsolicited suggestions. And then it’s my job, as the person that was talked at, to make them feel better, *further* exhausting my current state.
The solution to both of our problems is to ask and listen and hear. And then move forward. It’s true, we both exist. (Though I would argue that sometimes “bad advice” is just “advice I already tried, or that doesn’t work, but you don’t know that because you didn’t ask”).
And the solution to both is setting ground rules about what each person in the conversation can give and is expected to give.
If a fixer can’t empathize for a bit, and that’s what the other person needs, they should be allowed to step out of the conversation, too.
Well that's the basis of rationalism. Many important truths don't depend on the details of someone's state or someone's life history. To require it is to commit an ad hominem and destroys rationalism.
For example whether to drink alcohol is entirely unsafe at any level, according to the WHO. Expressing this as common knowledge is a counterexample of the popular heuristic to "listen to people's context".
Communicative empathy is still a heuristic, it is not an absolute rule. There are times when the message really is more important than how it is being conveyed. And actually people who run out of spoons know that all too well.
I mean, I understand what you're saying. I guess the main way I can explain it isn't in any idealized case, but in the transitional case.
I completely agree that people might not be looking for a solution in a discussion. My point is that transitioning from a place where there are plenty of people, having plenty of discussions, and ideas flow freely back and forth is normal and welcome. And then moving to a place where people have plenty of discussions, but more often than not, ideas flowing back and forth are treated with outright hostility...
I mean, for me, it was very obviously a completely jarring transition. It's not that there are times when solutions aren't welcome. It's that the vast majority of the time, with the vast majority of people, alternative paradigms aren't welcome.
Incoming wall of text, because this is topic that hits close to home for me, and I've spent a lot of time in the last few years exploring it. So, knowing absolutely nothing about you or your life or how it compares to my own, I'll proceed.
I personally agree with you. I want that municipal finance nerd to speak up and tell me that as well. I think I get a little jolt of endorphins whenever I learn something new, so for me there's actually almost a physical draw to people who can give that to me. I wonder if it's the same for you.
I think you're describing a position of resignation on your part: you've almost sort of given up, and tried to convince yourself that you're ok obliging people in the surface level conversation that they seem to want. And I suspect, resigned yourself to the fact that most people you meet day-to-day won't be able to give you those little endorphin boosts.
I struggled on this path myself. First: recognizing that you seem to want more from conversations than most other people are willing/able to give. Second: finding that your mind, which naturally draws you to learning new information, is not the mind that everyone has. Third: developing almost a sort of disdain for people who you find do not meet your imagined bar. Fourth: identifying the disdain and feeling bad about it. Fifth: telling yourself that ok, you'll just give up looking for it and also you'll stop being disdainful towards others for not being able to give it.
The sixth part is the first big leap: realizing that it's not that you want more from conversations, you want different. And what is engaging for you is not necessarily engaging for someone else. And that neither of you is righter or wronger in that.
The seventh, hard part that I suspect you may not have gotten to yet. You can't expect that people can give you the kind of connection you're looking for, that they can scratch that itchy brain of yours, without first allowing yourself to truly believe that their mind is just as deep and rich as your own, and accept that it's just rich and deep in different ways. The challenge, then, is to stop asking yourself "what is it that I have that all these other people don't seem to have" and start asking "what am I missing? what are all these other people experiencing that I am not?"
If it helps, you can consider it an intellectual challenge. Try to really empathize, imagine what it's physically like to exist in their body. Force your brain to consider the fact that in this moment, in this conversation, their experience may actually be richer than yours - just in ways that you can't, by default anyway, see.
> municipal finance nerd and believes that since dangerous local budget deficits are being driven by work from home policies, that city finances and looming cuts to important services might be what is pushing the return to office mandates, not is something the politicians want, but as a kind of compromise.
I mean, in that case, the municipality needs to get rid of that nerd asap. And the companies can and should push against that nerd asap.
Author here. This is an exposition on my journey trying to figure out if and/or how PDFs can have simple interactivity added in a portable way. The answer (spoiler) is ...sort of. I learned from some other discussion on this that grey-hairs may have already known this, but it was news to me, and I thought it worthwhile to write up.
> the clean modeled structure we want to see is for humans to maintain and extend, but the AI doesn't need this.
This does not match my experience. I do a lot of AI-assisted coding at this point, and what I've seen is that when the AI is asked to extend or modify existing code, it does a much better job on clean, well-structured and well-abstracted code.
I think the reason is simple, and tracks for humans as well: well-structured code is simply easier to understand and reason about, and takes a smaller amount of working-set memory. Even as LLMs get better with coding, I expect that they would converge on the same conclusion, namely that good structure + good abstractions make for code that is more efficient to work with.
Yeah I have had claude take over multiple internal (human written) projects that were in a dire state and spent a week just completely refactoring them and adding exhaustive tests before doing any new features. It's worth starting from a clean slate.
I love these optimization tales. Memory throughput bottlenecks (extremely common, perhaps moreso than they seem) are my favorite to tackle - there are frequently some juicy optimizations that can apply there.
Do model weights have any spatial locality that can be exploited? If so, there are some more general pre-compression techniques that might be interesting to try, e.g. bitshuffle is one I've worked with (https://github.com/kiyo-masui/bitshuffle).
Another fun fact: in some scenarios (depends a lot on CPU and memory characteristics), gzip+memcpy+gunzip can be faster end-to-end than just memcpy. I forget where I first heard this but my familiarity comes from the blosc compression library.
Like pretty much everything else about human beings, I expect most of us exist at a point on a spectrum rather than belonging to this type or not.
I think the engineering mindset comes from a place of curiosity. I don't agree that there is anything fundamentally different about the person who chooses to be an engineer versus not, I think everyone just has a different mix of characteristics and preferences.
For me, the act of creation is the compelling part. Sometimes that's writing code, other times it's seeing the fully-formed thing come into being. For the latter, LLMs can certainly help me do more, or at least take care of some of the menial stuff like writing test cases while I do more interesting things like think about strategy/architecture.
Just make sure you're reviewing your LLM's code as if you were a colleague's!
Also, his other work on polar stroking influenced one of the gpu-accelerated path renderers in Skia (graphics library powering Chrome and Android, among other things). See e.g. https://source.chromium.org/chromium/chromium/src/+/main:thi... where they refer to the same idea as radial stepping, or radial edges. Or if not the exact same idea, it's at least a similar idea of stepping in angle-space rather than purely in Bezier t-space or arc-length parameterized space.