No one needs to "fix it". What we need is more safe low level primitives from the user agents, that allow many individuals and companies to explore building alternatives in the browser. Then from two or more approaches, some standard will eventually shake out through the standardization process. Most features we have in the web started with a feature in one web browser, that others copied and eventually became a standard. If the browsers exposed more low level features, more people could contribute ideas on how to "fix" the problem.
Browsers should be written to expose APIs needed by the same people that write native applications today, but do so using a more appropriate trust and sandboxing model than what operating systems do. The browsers should act as "user agents" advocating on behalf of the users while exposing as low level and powerful APIs as possible and then standardizing those ideas that are well baked.
edit: regarding low level primitives, this comment [0] in this thread by addyo (Addy Osmani) is relevant. This low-level work is crucial.
[0] https://news.ycombinator.com/item?id=7917493