User:Brynosaurus~metawiki
Here is a draft write-up of some thoughts of mine on how WikiMedia (and perhaps other wiki systems) might be improved to deal with the problem of controversial pages and "edit wars" more gracefully and democratically. For background, see also the branch-related discussion in A Better Wikipedia.
(Note: incomplete; work in progress)
Wiki democracy?
Wiki systems work extremely well most of the time, but (especially in popular wikis such as wikipedia.org) there are always a few pages that attract substantial controversy, which end up having to be protected by sysops often or even most of the time. Not surprisingly, these controversial pages tend to be those related to controversial people or ideas. As wikis continue to grow, this trend is likely to continue, presenting the danger that only relatively uncontroversial wiki content will ultimately retain the freedom and cooperative editing properties that are so fundamental to "wikiness", whereas all content surrounded by any controversy will by necessity fall more or less continuously under the exclusive control of top-down authorities ultimately appointed by the site owners. (And what happens the first time two sysops get into an edit war? Has this ever happened?) Which is not to say that this "bi-modal" management regime will not work; only that it does not seem ideal in terms of wiki's cooperative principles. It would be nice if the freedom and cooperative editing could be reliably provided for all content all of the time, not just most of the time for and for the less controversial majority of wiki pages.
The obvious solution (and I'm far from the first to propose it) is to implement some kind of voting mechanism, so that controversial pages can still be cooperatively according to democratic principles instead of just having to be protected by specially-privileged sysops. But any such voting system should not create undue complexity or impede the freeform Wiki writing and editing process in the normal case, since the simplicity and freedom of the wiki system is obviously one of its greatest attractions. Also, a wiki voting system should ideally ensure that the "definitive" version of a page reflects majority opinion, without completely suppressing alternative, minority opinions. Finally, any voting mechanism should be designed to encourage meaningful discussion and group evolution toward consensus, rather than merely facilitating continual ideological warfare. In other words, the voting system should work towards making itself unnecessary.
Branches
Over in A Better Wikipedia, User:Marc Girod already suggested introducing branches into WikiMedia's revision system for the purpose of democratic Wiki-collaboration, allowing users to choose the "official" branch democratically while still allowing alternative branches to co-exist as alternative, "minority opinions". I like this idea, and my goal here is to flesh it out further and try to come up with good solutions to some of the problems that were brought up in the follow-up debate.
My proposal: Instead of being a page's history being a strict linear order, each stored revision of a page (already "labeled" by timestamp and author) can be marked as being "derived from" any previous revision (or perhaps multiple previous versions, in the event of a merge?), forming a directed acyclic graph in the obvious way. At a given time one or more of these revisions are also marked with a "head" flag, representing the current head of a branch.
Viewing branches
The main content page for a given wiki page always shows the head of the "official" or "most popular" branch according to users' votes, as described later. The corresponding "history" page, however, lists:
- the head revisions of the most popular (say) 5 branches, each with a link to select that branch
- the actual revision history of the currently selected branch (the "official" branch by default), reconstructed by following the "derived-from" dependencies from the branch's head revision.
- a link (or a separate tab) allowing users to view all the head revisions in the page's history.
Extending branches
To extend the current "official" branch, a user just clicks "edit" on the main content page, just like they do now. To extend a different branch, a user just goes to the head revision of that branch on the history page and then clicks edit. In the normal (non-edit-war) case, the new revision is saved and the "head" flag is transferred from the old revision to the new one, causing the existing branch to be continued in the usual linear fashion.
Creating branches, involuntarily
However, if the wikitext of the existing revision being edited contains a special "exclude-user" flag naming the author of the new revision (or if the author is anonymous and the page contains an "exclude-anonymous-users" flag), then instead of extending the existing branch, the wiki system just creates a new one: i.e., the new revision is marked as a "head" revision without removing the "head" flag from the old revision. Thus, in this scheme users are never barred from editing whole pages, but only from extending particular branches.
In edit war situations for which exclude flags are not sufficient, e.g., in the presence of a vandal who changes accounts repeatedly to evade the exclude flags, a stronger set of "include-user" flags might be used instead, which would allow only the named users to extend that branch.
Creating branches, deliberately
A new branch can be created deliberately simply by editing a non-head revision of an existing branch. Thus, branch creation also replaces the old rollback behavior.
Voting for branches
Whenever any user creates a new branch or extends an existing branch, the wiki system automatically counts the user as having "voted for" that branch (and removes any vote the user may have previously attached to a different branch). Thus, if several who "get along" reasonably well repeatedly extend a given branch, then their votes will automatically be attached to that branch without them having to take any special action.
Other users who are not actively checking in new revisions can nevertheless cast votes for a particular branch simply by calling up that branch on the page's history tab and clicking a "Vote for this branch" link.
All votes expire after some time period (e.g., a few weeks) if not explicitly refreshed, to ensure that the accumulated "weight" of past votes cast by users who are no longer paying attention does not outweigh the votes of currently active users.
Page hijacking
This system is obviously vulnerable to the problem that after a period of relative calm, a branch as-yet-unprotected by exclude or include flags might suddenly be "hijacked" by a vandal who (for example) adds an include flag to the page that only allows himself to edit it. XXX answer...