That's why I suggested it should be an annotation at most, so you can convey the intent without limiting the users.
It can still be using keywords like public, protected, private. Just make them non-binding. In similar manner how TypeScript types are non-binding. You can ignore them in any program that uses TS lib.
> ...so you can convey the intent without limiting the users. It can still be using keywords like public, protected, private. Just make them non-binding.
Yeah, the users aren't likely to be really limited these days.
1) A huge number of widely-used languages have reflection, so you can get at internal members if you really try.
2) For those languages that don't, just remove the keyword and recompile. Someone who's willing to take on the maintenance burden of directly using parts of the software marked by their author as "internal only do not use" is clearly willing to maintain such a minor fork.
[0] Good luck with enforcing the One True Naming Convention.