It's definitely a feature Craft is missing, and I've had requests from several clients who are frustrated about it (not super frustrated, fortunately, because everything else in Craft is so much better than whatever else they were using before) :D
Implemented as a plugin, in my opinion there are two primary problems to solve – the first is how to "store" the "being edited" state for an entry being edited (and obviously, clearing that state once the entry is no longer being edited), and the second is how to communicate that state to any other users attempting to edit the same entry.
The first problem could easily be solved by using AJAX in order to save the entry ID to a custom database row, keeping track of entries being edited. The real problem is how to ascertain that an entry is being edited, or even that a user is in fact interacting with an entry editing form (an issue the second feature request Brad links to in his answer deals with).
The second problem could probably be solved by either using basic AJAX polling, where a script checks with the server on pageload, and then every X seconds, if the "being edited" state of the current entry has changed; displaying the appropriate message to the user once it does (Craft uses this approach for login timeouts). Websockets would of course be an even better approach, but is a bit more troublesome to set up.
I've actually done some work on a plugin just like this myself (unfortunately, its nowhere close to being finished yet, and might never be!), which uses Pusher (essentially websockets as a service) for problem #2. For problem #1, I've previously "solved" this in other plugins like Reasons by using jQuery to parse the Control Panel HTML, looking for the appropriate form input fields (for instance, the entry editing form would have a hidden action
input with the value entries/saveEntry
, as well as an input named entryId
), in order to identify the current page as an entry editing form. Basically, hacks that could break at any time, e.g. if P&T redesigns the Control Panel.
Beyond this, there are a plethora of other issues to solve. For instance, entries in Craft can be edited in several different ways, so the plugin probably needs to handle element editor modals and Live Preview as well. Also, making sure that an entry is "unlocked" is not as easy as it sounds – a JavaScript "unload" handler would probably work in most cases, but is fickle, in my experience, so there would probably need to be some sort of timestamping feature built in as well, and probably a task to clean up old/stale "being edited" rows from the database.
Due to the potential complexity of the feature, I really hope P&T builds it into core some day. If not, I'm sure a plugin will pop up sooner or later (mine or someone else's).