Egregoros

Signal feed

Timeline

Post

Remote status

Context

6

as a toolmaker, there's an inherent tradeoff that I encountered years ago when I just started working at ChipFlow; what I was asked was essentially to develop Amaranth further as a way to de-skill the hardware design (RTL) field. I agreed because I don't really value the skill of knowing every one of the five hundred different ways in which SystemVerilog is out to fuck you over; I think we'd be better off with tooling that doesn't require you to spend years developing this skill, and that would be a lot more friendly to new RTL developers, and people for whom RTL isn't the primary area of work.

I also knew that ChipFlow was on the lookout for opportunities to shoehorn AI somewhere into the process. (at first this was limited to "test case generation"—frankly ill conceived idea but one I could hold my nose at and accept—nowadays they've laid off everyone and went all-Claude.) however, it was clear pretty early on that making hardware development more accessible to new people inherently means making it more accessible to new wielders of the wrong machine. benefiting everyone (who isn't a committed SystemVerilog developer) means benefitting everyone, right?

you can trace this trend in adjacent communities as well. Rust and TypeScript have rich type systems that generally help you write correct code—or bullshit your way towards something that looks more or less correct. I'm pretty sure it's a part of the reason Microsoft spent so much money on TypeScript.

so today I find myself between a rock and a hard place: every incremental improvement in tooling that I build that makes the field more accessible to new people also means there's less of a barrier to people who just want to extract value from it, squeezing it like Juicero (quite poorly but with an aggressively insulting amount of money behind it). so what do I do now?..

@whitequark

This is very close to where I parted ways with the FSF. There's always a tension between enabling people to create the desirable thing and enabling people to make the undesirable. Their view is that it should be very hard to make the undesirable thing, and slightly easier to make the desirable thing. My view is that you should make it so easy to make the desirable thing that people always have a choice and then, once the desirable thing exists, you can apply other pressures to get rid of the undesirable thing.

I don't think deskilling is the right framing for a lot of these things, it's about where you focus cognitive load. There's a line from the Stantec ZEBRA's manual (1956) that says that the 150-instruction limit is not a real problem because no one could possibly write a working program that complex. Small children write programs more complex than that now. That's not a loss to the world, the fact that you don't have to think about certain things means you can think about other things, such as good algorithm and data structure design.

There was research 20ish years ago comparing C and Java programs and found that the Java programs tended to be more efficient for the same amount of developer effort, because Java programmers would spend more time refining data structure and algorithmic choices and improve entire complexity classes, whereas C programmers spend the time tracking down annoying bug classes that are impossible in Java and doing microoptimisations. Of course, under time pressure, Java developers will simply ship the first thing that works and move onto new features rather than doing that optimisation. C programmers would take longer to get to the MVP level and their poorly optimised code was often faster than poorly optimised Java.

I see LLMs as very different because they don't provide consistent abstractions. A programmer in a high-level language has a set of well-defined constraints on how their language is lowered to the target hardware and can reason about things, while allowing their run-time environment to make choices within those constraints. Vibe coding does not do this, it delegates thinking to a machine, which then generates code that is not working within a well-defined specification. This really is deskilling because it's not giving you a more abstract reasoning framework, it's removing your ability to reason.

Letting people accomplish more with less effort, in an environment where their requirements are finite, ends up shifting power to individuals, because it reduces the value of economies of scale.

@giacomo @whitequark

I think you're misunderstanding my point. The FSF decides to promote the creation of Free Software (a goal I agree with) by creating complex licenses.

Developing software reusing software under any license requires understanding the license. The FSF's licenses are sufficiently complex that I have had multiple conversations with lawyers (including some with the FSF's lawyers) where they have not been able to tell me whether a specific use case is permitted. This places a burden on anyone developing Free Software using FSF-approved licenses, because there are a bunch of use cases that the FSF would regard as ethical, but where their licenses do not clearly permit the use.

It places a larger burden on people doing things that the FSF disapproves of. They have to come up with exciting loopholes. Unfortunately, it turns out that this isn't that hard and once you've found a loophole you can keep using it. The FSF responds with even more complex licenses.

EDIT: To be clear, the FSF and I have very similar goals. I just think that their strategy is completely counterproductive. Complex legal documents empower people who can afford expensive lawyers. We're increasingly seeing companies using AGPLv3 to control nominally-Free Software ecosystems.

@david_chisnall @giacomo

> The FSF's licenses are sufficiently complex that I have had multiple conversations with lawyers (including some with the FSF's lawyers) where they have not been able to tell me whether a specific use case is permitted.

This is completely unacceptable and more people should know about it. If the FSF lawyers can't even answer, what good is the license in the first place?
@phnt @david_chisnall @giacomo well just imagine the precedent if they try to defend the license but can't because of how awful it is. What happens to the entire community when their license falls down like a house of cards?

Guess they gotta draft GPLv4 family of licenses and tell everyone to make sure they have the "or later" in their license file :laugh:

Replies

3

@feld @phnt @giacomo

There’s also the problem that defending it is expensive. They refused to defend the license for one FSF project I was involved with because they didn’t think the risk / reward calculation made sense. Which means that FSF licenses on GNU projects don’t apply to you if you have enough money to look like you can make going to court very expensive. On individual-run projects, they don’t apply to anyone willing to simply ignore them because individuals can’t afford to take violators to court.

@david_chisnall @phnt @giacomo so in theory the only way the community can come together to ensure that the GPL is universally enforced is to... have every project enforce a CLA that assigns copyright to a single organization which then changes this risk/reward calculation?

edit: and if that organization is not vigorously monitored/managed, it could be taken over by malicious actors who then leverage this copyright ownership to fork projects and change the license to something else

@feld @phnt @giacomo

The FSF was not a large enough organisation to deter infringers in the case I was directly involved with and they do have a track record of going after infringers. And, unfortunately, copyright assignment meant that they were the only people who could go after infringers.

What might work is a CLA, or even license clause, that allows multiple parties to go after infringers (have standing to sue as designated agents of the copyright holder) and requires that they split the proceeds with the copyright holders on a fixed ratio, with legal fees coming out of their part. That would incentivise other groups to chase down any instance of infringement in hope of a payout.

I’d be very nervous of putting something like this in a license as complex as any of the FSF’s though, because it would also incentivise chasing individuals who accidentally infringed and would immediately settle because they wouldn’t be able to afford to go to court.

One of the problems with using copyright law to protect end users (the FSF’s strategy) is that only the copyright holder has standing to sue, but they are not the ones harmed by violation. If I release a GPL’d program, and you buy something containing a derived work that doesn’t respect the license and (for example) contains some easily fixed bug that you cannot fix due to this violation, you are harmed but I am the one who has standing to sue.

But rather than do any of this, what I want is to build systems where end users can easily modify and extend them and create an ecosystem where closed proprietary products can’t compete because users expect and actively exercise the rights to modify and redistribute software. Requiring users to understand a complex license before they exercise the rights that are the thing that differentiates Free Software from non-Free software provides a barrier to their exercising these rights, which composes with any technical barriers.