There are multiple reasons.
One reason is that people always want everything to do "just a little
bit more".
just about every single protocol I've watched has gone through a some
standard stages:
-
- "The problem space is simple. We will define everything we need."
-
- "We can handle the needed new features by reissuing the protocol."
-
- "As long as we provide a registry for new features, we will be OK."
-
- "As long as we do vendor spaces for new features, we will be OK."
-
- "As long as we have mandatory/optional extension flags, we're OK."
-
- "How did we end up with such a complex protocol? Let's kill it!"
Feature negotiation is required at all stages beyond number 2, and
sometimes even at stage 2; it depends on the new features.
Numbers 4 and 5 sometimes trade places, and number 6 can occur at any
time.
That's life.
(Real, named examples: HTTP, Receipt notifications, X.400, X.500, PGP/MIME,
LDAP, BGP, DHCP, SRVLOC, SMTP, URLs.....counterexamples would be harder
to find....)