Really good read on language design and community ...
# thinking-together
m
Really good read on language design and community management. Sometimes the principled design approach takes a toll on everyone when it's iterative https://lukeplant.me.uk/blog/posts/why-im-leaving-elm/
👍 2
😮 1
d
I don't follow Elm, so it's the first I heard of this controversy. Nevertheless, I understand why Elm 0.19 needed to impose these restrictions. Elm is a pure functional language. Functions cannot have side effects. It's the same for my language, Curv, so I'm dealing with similar issues. I don't see any discussion on the internet explaining the Elm 0.19 restrictions from the language maintainers perspective, so I'll give my take.
I have considered adding native modules to Curv. I think it would be a big mistake, because people would use that as an escape hatch for adding impure functions to Curv. The problem is: this would break the compiler and the runtime. The assumption that functions are pure is baked in to the design of the language and its implementation at a fundamental level. If there were impure native modules, then standard pure-function compiler optimizations would break everybodies code using these native modules, and that would be reported as bugs. Users would take the position that these "bugs" need to be fixed, which from my perspective would mean redesigning the language, the compiler and the runtime along entirely different lines, so that Curv is now an impure functional language. I don't want to put myself in that position.
Turns out that Elm 0.18 had support for native modules. And Elm 0.19 added compiler optimizations that are incompatible with existing native modules, which I assume contained impure functions. So Elm 0.19 now only supports native modules that are approved by the core implementation team.
And there is a big outcry about the authoritarian, non-open-source attitude of the Elm team. Sounds like a bad situation.
m
This post focuses on what he sees as hypocrisy: many non-essential modules owned by the maintainers and their friends are impure (eg Evan's markdown module). So the whole purity transition is inviable if the maintainers themselves can't adapt to their own pure standards.
👍 1
If Elm was strictly pure from the beginning, those who needed impurity wouldn't have become invested in the project. The problem is that there's now a lot of broken deeply-vested production projects due to the opaque and unilateral decision of 0.19. If your product is built in Elm and relies on impurity with no clear path forward, you've gotten completely burned by this switch.
e
Some people can't handle the benevolent dictator for life control that language authors can have. It certainly didn't hurt Python, which reached up into the top 3 languages, with benevolent dictator Van Rossum just stepping down recently. Evan Czaplicki is a smart guy, and he is doing a first class job on Elm. However, with the limited resources available, the features people want (and Mr. Plant wanted native modules and a localization system) may not happen in a timely fashion, and in that case you have to bail. It is after all still before version 1.0, so one has to give them some slack. Mr. Plant has a 7000 line program he doesn't want to rewrite, so i understand the pain, but luckily 7000 is a small program. Elm doesn't have magic dust so it can be converted, the effort can be measured in days of work. There is a lesson here for all language designers; it is much less painful for the users if you only add to the feature set; subtracting a previously available feature may cause agony among the user base. But there is a weakness in the additive language evolution process, because if you avoid pain in the user base by only adding (C++ are you listening?), if you keep up that process, you end up with a kitchen sink type of language mess after a few decades, and the whole thing should be be thrown out. If your original design is clean, hopefully you won't need to add much. I used Modula-2 and it only needed adding a preprocessor for conditional compilation, and some unicode string markers in its evolution. It was so simple it was complete from the start.
👌 1
m
@Edward de Jong / Beads Project agree with all of that -- one thing I'll add though is that the "1.0=production" distinction is far more complicated than you make it. Plenty of companies use Elm in production (which the team does evangelize), and plenty of other projects haven't hit 1.0 and it's been years (eg React Native)
I do still agree with the overall point that you get what you sign up for and 1.0+ is a sign of a language's age
e
In my first job after college i worked for a consulting firm that made a decision support system for Fortune-50 companies. It was a terrific product, but when a user wanted a feature, they would throw serious money at the company and they got it. If they put enough money on the project it got bumped up to #1. It is an honest system, money is voting; in open source you have an economy of feelings, where people think their devotion to a product and evangelism somehow give them more votes. In many ways i prefer the clarity of the commercial world. A language is a tool, and its value is created by users accomplishing something else. It is a crucial part of a project, but just like a hammer or saw, it is not the final product. The one area where software tools have a flaw is that when you construct a house the hammer and saws used to build the house are not left inside the house; while in software, there is usually some runtime system that is permanently embedded in the product and if that runtime gets broken the whole thing stops functioning. This is a key reason the software industry has been like building sandcastles.
👍 2
w
"I'm well aware how entitled people can be in OSS".. followed by a gigantic wall of text that doesn't manage to disguise just how entitled he is..
👎 2
the reason why something like Elm is good is exactly because it consistently follows the vision of one or few people.. going along with everything the community asks for would be the death of it.. it's not a "bazaar" style project
💯 1
e
One thing that made Modula-2's simplicity survivable was that there was a way to call external functions which might be in assembler or C. When you encounter a very high cost area of computation, like bitmap masking and rotation, you occasionally need to dip into lower level languages, and having an "escape hatch" can be very helpful. However in modern high-runtime environment languages like Elm or Beads this isn't really feasible for the most part. The more dramatic the improvements the language offers, the less it will connect with the existing systems. This is an intrinsic tradeoff i believe. In
w
@Kartik Agaram care to explain your 👎? All of his complaints eventually boil down to him demanding to use the time of people he's not paying. That is never acceptable in my book.
k
He's a better writer than me, so if that's all you got from this post I can't do better, sorry. It's vehemently not what I got from it.
👍 1
w
That's a "no", then.
k
Yep. You're trying harder than usual to 'win' this argument. Think about why that is. And maybe reread the post. It's pretty well-written so I'm not sure where the disconnect is in your mind.
To help triangulate, I also strongly agree with everything here: http://www.skeeve.com/fork-my-code.html But that's not what OP is about.
There's a hypocrisy at the center of many popular open source projects that's just more obvious with Elm: you're legally allowed to fork, and you'll be told to go "fork off" if you annoy the maintainers. But anyone who has the temerity to actually create a fork is shunned or constantly bombarded with questions about why they're sowing division in the community. My computer can hold multiple incompatible forks without them mutually annihilating. Why can't people's belief systems? When was the last time we saw a maintainer thank someone for creating a fork? Forks should be treated more like Andon Cords (https://itrevolution.com/kata). Creating them is an act of bravery, and even if you don't agree with the reasons they are a valuable source of feedback. These are events to be celebrated and encouraged.
💯 4
i
Having been on both sides of this, I agree with the author. @Wouter I'm with you on the entitlement and the ridiculous expectations people have of open source maintainers - I still remember the first time I had someone screaming at me because LightTable didn't work on their crazy custom version of Linux. But, if you openly encourage people to take a dependency on you, if you go out of your way to build a community and promote the use of your software, you are signing up for an implicit social contract. You made the choice to place yourself in that position and so you are now held to the behavioral standards that come with it. You can't have it both ways: if you want to just sit at your desk and make a thing you want, that's fine. If you put that up on github and some other people take an interest, that's fine too. You have no responsibility. But once you actively promote your system and tell people they can and should build on top of it, you've explicitly chosen to be a steward. There are significant benefits that come with that choice (Fame! Fortune! 😉 ), but it isn't free. It comes with the burden of supporting those you encouraged. You can still of course choose not to do that, but you're now breaking a societal contract and that eventually causes posts like these.
💯 6
To take an extreme analogy: there's a difference between someone taking an interest in a car in your driveway vs you going door to door telling people you've got a great car for them. The latter comes with an expectation of integrity and service, the former does not.
👍 2
w
@ibdknox I don't buy that.. even if you generally want your software to be popular, and you want to be accommodating, your time never grows beyond 24hrs a day, yet the amount of people, and the amount and diversity of demands will always dwarf your time, as it gets popular. And every decision you take, no matter how reasonable, will be someone's most most evil move ever, and they will spend all their energy fighting you over it. There is no "social contract" that can fix this. In the end, the amount of time the original author is going to spend on your demands is "best effort" and "within reason", at the discretion of the original author.
And yes, I am incredibly biased, because I have spent probably 100x more time on the maintainer side of OSS projects than on the user side.
k
Yeah, I certainly appreciate the scar tissue maintainers have, and the level of bad behavior they often have to put up with. Certainly I'm willing to believe the ratio of bad behavior is 10:1 or 100:1 against maintainers. But it seems excessive to claim there's no social contract at all. In this case what we're talking about is sins of commission, not omission, actions that have taken lots of energy to take. So I don't think "best effort" holds water as a justification.
👍 1