It depends on what you mean by "required".
Access modifiers are not a necessity. IYou could replace every access modifier with public
and my applicationmost applications will work just like itthey did when Iyou used varied access modifiers, proving the point that the compiler's main goal (outputting a working application) is not directly dependent on access modifiers.
As Delioth mentioned in the comments, both Javascript and Python are capable of OOP yet have no concept of access modifiers; proving the point that OOP does not require access modifiers.
However, access modifiers very much matter from a developer's perspective if you're interested in avoiding mistakes. Lack of access restrictions leads to developers accessing dependencies directly that they shouldn't (e.g. circumventing a validation/authorization layer), and this is going to lead to bugs, which leads to time and effort spent.
In conclusion, access modifiers are not required for the compiler, but they are mostly considered a very-nice-to-have for good practice. Such guidelines "require" developers to exercise diligent access control - even if the compiler doesn't need it.
Why some modern languages remove the
protected
?
There is no universally applicable answer to that question, other than "because that's what the language designers decided to do".