The reason `os.Open` has not changed is because it doesn't have to change. None of the features you mention really make sense for what it does. At least that would be my interpretation. If you want to support your interpretation, I would suggest digging up proposals to add those features which got rejected because we didn't want to add more functions. That would show that a lack of keyword arguments is to blame for a lack of `os.Open` evolution, instead of a lack of need for evolution.
On the other hand, `net.Dial` empirically shows that it *is* possible to use this approach to not add more functions, while expanding functionality. Pre Go 1.0 there was only net.Dial. For Go 1.0, we determined that we would want to be able to specify timeouts, so
we added net.DialTimeout. Then, for Go 1.1, we also wanted to specify a local address to use. However, it became clear that it is not sustainable to add more and more versions of a `Dial` function, so
net.Dialer was added in Go 1.1. Since then,
we have added many more options to it. As adding fields to a struct is backwards-compatible, we can add as many options as we like, while still maintaining compatibility and not adding new package-scoped API surface or functions.
The actual history of `net.Dial` strongly implies that if we *wanted* to evolve `os.Open`, then what we would do is add a new struct type `os.Opener`, with fields for all these optional features, which would then have an `func (*Opener) Open(name string) (*File, error)` method. It's not a perfect mechanism, but so far, it seems to have sufficed.
To be clear, if you feel strongly that we should support keyword arguments, you can write and file a proposal to that effect. All I can say is that in the past, this has come up repeatedly, but obviously has not been accepted. So your case should better be strong - and in particular, it should acknowledge the evidence and history we've built in over a decade. And you might ultimately save yourself some frustration by instead adopting the imperfect solutions we do have.