The way I read the situation, I think there are two distinct groups/use-cases that are dissatisfied with how things are1. I think it would be helpful to be clear in discussions which of these one is addressing, as they have quite different needs:
- People who are using Elm for work and are worrying about getting blocked. They
- are building applications
- are highly time sensitive (i.e. waiting six months for maybe a solution isn’t an option for them)
- would rather have a good enough solution now than a perfect solution later
- don’t particularly care about long term concerns like future portability
- care about smooth tooling (it is not sufficient that just the compiler works, it needs to work with CI systems, JS bundlers, testing toolkits, code generators, etc – this makes low effort forks problematic for them)
- People who are trying to contribute to Elm in some way. They
- are building packages or fixing the compiler or tooling
- care about making a high quality contribution (even if this takes somewhat longer)
- care about affecting others (i.e. they are not just trying to fix their own code, they want to enable others to achieve things)
For example the ability to compile Kernel code is only useful to group 1, whereas to group 2 it would only be useful if it was also possible to publish packages containing Kernel code2.
I believe that the main counter-concern is, that we all want to maintain the high quality of Elm and the benefits that brings.
-
For the first group, it has been repeatedly reported that after the ban of native, these people were forced to figure out ports and custom elements and they were often happier at how their code turned out3. That suggests that when the ability was there, it was fairly often used for things where it was not essential but rather as a path of least resistance.
-
For the second group, the issue is that packages, once published, are somewhat immortal. Once people start depending on them, it is difficult to remove them. We have heard people complaining about Websockets going away for years now (despite that being a use case remarkably well suited to ports). This creates a lot of pressure on getting these foundational packages right.
A wacky idea for group 1
I wonder if some of these things couldn’t be balanced with adjusting the incentives by adding artificial friction. Perhaps only allowing to compile Kernel code without --optimize
like the Debug
modules work now and adding a 5s sleep call for each non elm
or elm-explorations
Kernel module compiled would be sufficient that people would only use this after trying to solve their problem every other way. Other disincentives to consider:
- Printing a humongous and nasty warning on every compile. (Elm Foundation warns: Using Kernel code may lead to lung cancer! )
- Only allowing Kernel code compilation with a crypto key. One would need to print, sign and fax a long form to the Elm Foundation to acquire one.
- Failing compilation randomly with a 15% probability.
A more reasonable idea for group 2
Personally I think the current guidelines on how to contribute to Elm are simply not good enough. Perhaps simply clearly stating something like:
Contributions to Elm are limited to the core team. The core team is based around personal relationships and we do not accept strangers from the internet. Reporting bugs is encouraged, but due to our process, please don’t expect a response.
Would be more fair in terms of expectation setting. There are many open source projects were code changes are limited to some group of people. But something like this would at least set people up with expectations that wouldn’t be frustrated. Any violations of the above would simply be happy exceptions to the rule. Whereas the current talk about how contribution works in Elm (talk, do research, coordinate, then code, …) makes people believe that as long as they follow that somewhat vague process, they are likely to succeed.
1 Of course this is a simplification of reality. Many application developers would also like to reuse/share solutions to common problems for example. But I am here focusing on concerns that become extreme enough that people feel like they need to exit the community (often with a bang).
2 With the small caveat that it would at least make testing Kernel code based patches somewhat easier and perhaps enable some hacky ways to get around the package system.
3 Of course there is massive survivorship bias here. Many were not and churned away - in some cases even building tooling to transform their code into a different language.