A fork is a change to the network's protocol rules. Anyone can do it, as long as they are able to change the code in the client.
There are two kinds of fork:
Soft Fork- Backwards compatible. You don't have to upgrade to use it.
Hard Fork- Non-Backwards compatible. Older clients will not recognize your rules and they will not see your newly generated blocks as valid and thus diverge from the majority chain.