The RFC 6335 is explaining this:
Ports in the Dynamic Ports range (49152-65535) have been
specifically set aside for local and dynamic use and cannot be
assigned through IANA. Application software may simply use any
dynamic port that is available on the local host, without any
of assignment. On the other hand, application software MUST NOT
assume that a specific port number in the Dynamic Ports range
always be available for communication at all times, and a port
number in that range hence MUST NOT be used as a service
The reserved ports:
Ports in the User Ports range (1024-49151) are available for
assignment through IANA, and MAY be used as service identifiers
upon successful assignment.
Ports in the System Ports range (0-1023) are also available for
assignment through IANA. Because the System Ports range is both
the smallest and the most densely assigned, the requirements for
new assignments are more strict than those for the User Ports
range, and will only be granted under the "IETF Review" or "IESG
Approval" procedures RFC5226.
The introduction explains the confusion:
For many years, the assignment of new service names and port number
values for use with the Transmission Control Protocol (TCP) [RFC0793]
and the User Datagram Protocol (UDP) [RFC0768] has had less than
It seems that Windows XP is not following RFC6335, but Solaris 10 does.