@Benny, thanks for the extensive overview.
Before starting, let me present the lens to be used to read the text below: the desire/need for Julia OSS ecosystem growth. This is the main assumption - without taking this into account, some of my comments might sound rude or against the freedom of developer expression.
Now having set the playground, here is my take on the liberty of knowledgeable developers in using internals in packages: it is disrespectful to the other developers willing to contribute, and I don’t think that having a version less than 1 can be a reasonable excuse.
The only excuse is not being able to implement a certain feature without the usage of non-public internals (which should not even be possible in a Turing complete language). Also, syntactic sugar should not rely on the internals (there is no excuse for that - given that we have these god-level macros).
I think the usage of internals in public OSS packages is hurting the Julia OSS ecosystem by promoting the intimidation factor and driving away the developers who want to help build the Julia OSS ecosystem (and maybe this can be a topic on its own).
Now, let me go into more detail.
Imagine that a fraction of new Julia developers who are starting to be confident enough are willing to contribute to the Julia OSS ecosystem. This can be done by building a new package or contributing to existing packages. Many might be interested in contributing to some package they already use (maybe something that their work relies on).
They are starting to look at the source code and encountering some features built using internals.
I don’t think it is fair to require the new developers that are willing to contribute to actually go and dig up the Julia internals so they can effectively participate. Also - not knowing that the code they see is actually non-stable Julia features, some might feel that they are not experienced enough to start contributing and just give up the idea altogether.
Yes, the users of the package were given a fair warning by means of <1 version. But in this scenario, if the internals is used, it seems that this is also a warning for the potential contributors - if you are not skilled enough in the language internals (or willing to spend the additional time acquire the relevant knowledge), do not approach this package - go away and come back when the package reaches version 1 or more.
I had a small contribution to the OpenAI.jl package - however, I am not sure if my contribution would even have been possible if the source code of the package looked like a foreign language to me. Fortunately, it didn’t.
It was not my intention to hurt anybody’s feelings here. I appreciate the skills of those using internals, and I am learning a lot by reading their code. But again, the focus of my message is not related to the OSS ecosystem, and it is my honest opinion that the use of internals in public packages is potentially hurting the community.
P. S. Maybe next year of Julia Community Survey, a new question can be added: Did you want to contribute to a Julia package but gave up because you had encountered some code that seemed foreign to you as a Julia developer?