What we want to do is develop reliable software that doesn't constantly break. Hopefully we can all agree that is a reasonable goal.
When you allow third-party addons, that goal becomes a lot more difficult. If addons access internal code, it will sooner or later break, since software products are constantly evolving and sooner or later the internal code is changed. This means some future update to the product breaks things. The impact of this ranges from a mere inconvenience to a complete catastrophe with thousands of customers complaining and thousands of projects broken.
The way the industry solves this is with two key principles:
- Provide a stable, public, documented API that developers can use. This allows substantial internal changes - even complete rewrites - while preserving compatibility so long as the public API still works the same.
- Use encapsulation to enforce that only the public API can be used. This prevents developers succumbing to the temptation to access internal details anyway, and still cause all the problems that the API was meant to avoid.
This is all basic stuff in the software industry and it isn't remotely controversial. Go and use any other product with an addon system and you'll find it probably works the same, for the same reasons.
With SDKv1 we were failing in our goal to make reliable software that doesn't constantly break. Therefore we moved to SDKv2 which uses the above two key principles, like the rest of the industry uses. I fully understand this is a painful transition, and it is not something we did lightly, but it is absolutely necessary in order to achieve the goal of making reliable software that doesn't constantly break. This also benefits addons! If you also want your addon to be reliable and not constantly break, it needs to follow the above two principles as well.
I suspect perhaps some developers got interested in the ability to access internal details, and thought it was cool or useful. However that was only possible due to the historic weakness of JavaScript encapsulation, and if you do that, you will end up with unreliable software that constantly breaks. I am not sure everyone understands that point - some people seem to think they can just deal with it. That is misguided: it is a very real possibility that such addons permanently break at any time. Some people seem so convinced this is not true that they resort to being abusive to staff, which is unacceptable. People may disagree but they must abide by the Forum & Community guidelines. However I must point out that disagreeing is going against decades of industry-standard practice and consensus.
If you wish to develop quality software and build addons that are reliable and work in the long term, it is also in your interest to use these principles. I don't know why any responsible addon developer would want to make an addon that they cannot guarantee to users will keep working and risks permanently breaking at any time.
So far I've mostly just re-iterated the situation with SDKv1 to SDKv2, which mostly pertained to the runtime. This brings us to the editor and the prospect of SDKv3.
The editor is not designed to have UI extensions. The entire DOM - all HTML, CSS, event handlers and so on - are considered internal details. They could change at any time, and that could break any addons integrating them. This brings us back to pretty much the same situation as SDKv1. Not only could such addons break the editor at any time - with the prospect of editor crashes on startup being particularly worrying - but we could also break your addon at any time, quite possibly permanently, and we won't provide support in that situation. Exacerbating the problem, we cannot actually just wash our hands of it and leave the addon up to you, because when things break, everyone comes and blames us and tells us to put back whatever we broke. Some people simply refuse to accept the fact it's not our responsibility, and forcefully insist that we fix it. This is a nightmare scenario for us, and we've had it with SDKv1.
So I have to ask: do you intend to build reliable software that keeps working? If you do, you won't do this, because you can't guarantee to your users that it will keep working! In order to provide that guarantee, we need the above two principles: a stable, public, documented API, and encapsulation to enforce it. Neither exists for the editor DOM. We could in theory do this. However it is a great deal of work with its own maintenance complications, some of which I addressed in this post. So the next best thing is to at least use encapsulation to enforce that editor addons can only do supported things - hence the prospect of SDKv3.
I am well aware of all the criticism aimed at us over both the move to SDKv2 and the prospect of SDKv3. However our goal is and always has been to make reliable software that doesn't constantly break. If we are to achieve this goal, the above two principles are essential. It does not matter how much people criticize us or how much other developers disagree about these points: this is unequivocally what it takes to develop reliable software that doesn't constantly break. I think some people perceive this as being overly controlling, but let me remind you this is how the rest of the industry operates.
You might then ask: how are you meant to achieve this then? The answer I'm afraid is simply that you don't do that. It's not supported. Move on and invest your time and effort in something that is supported and will continue to work in the long term. Find some other way to solve the problem. For example instead of trying to integrate some tool directly in the editor, make it an external tool, and provide some way to import/export your work. I've seen some experiments with making a 3D editor that operate on that principle, and it is a good approach. You can do anything - absolutely anything at all - providing you stick to the public, documented, supported API features. There is plenty of scope to be creative and come up with cool and innovative features that abide by that. There is also scope to extend the supported editor APIs to better allow integrating with external tools, such as the existing Custom Importer API which was designed for importing work from external animation tools like Spriter. We can always do more in that direction, especially where they are thoughtfully designed relatively small but flexible features. Perhaps one less-bad option would be a supported option to open a popup window which can then show custom HTML and CSS content, and communicates with the editor via postMessage() - at least then the custom stuff is sandboxed within a separate window, it's still relatively flexible, and it's still a long way short of full editor DOM modification.
If you disregard this and make addons that break the editor, then I will again feel that we are failing in our goal of making reliable software that doesn't constantly break. Therefore I will feel obliged to act on behalf of us and our customers to improve the situation such that we have reliable software that doesn't constantly break. That is why I would consider SDKv3 to enforce encapsulation for editor scripts too, even though it may be another painful transition. It's simply what is necessary to achieve our goal.
I want to finish with an appeal for co-operation. Please consider everything I've written, and do what you can to work with us. If you ignore this and work against us, using unsupported features and ending up with things breaking, we will feel obliged to take steps to mitigate the problems caused, such as by enforcing encapsulation. If you co-operate and work with us on supported features, such as perhaps a popup window API that is significantly more reliable long-term, perhaps we can end up achieving both some degree of the features you want, while maintaining our goal of making reliable software.