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.
This, and to answer the second of the thread there are some reasons to create a fork, this is similar to open source software sometimes there are differences about the direction of a project and you can create your own, bitcoin cash is a perfect example of this, but there are other forks that have no other reason to exist than to make money to the ones that are forking the coin.