What are the differences between crystal structure file formats like CIF, XYZ, PDB etc.?

We come across many file formats like CIF, XYZ, PDB, INS, cc1, p1, POSCAR, FDF, struct etc. Why do we have so many file formats to store crystal structure information? Are they redundant? Can someone give a historical perspective and advantages/disadvantages of these file formats?

The XYZ format provides a list of atoms with minimal content: element and coordinates. This is often not sufficient, so people need other formats. In particular, XYZ cannot describe a crystal -- it doesn't include unit cell parameters.
The PDB format was designed with proteins and nucleic acids is mind.
The format is old (from 1970's) and popular, so sometimes it's used even for inorganic materials, but it's well fitted only for systems with the model>chain>residue>atom hierarchy.
Additionally, the fixed column format imposes limitations: residue name
can have up to 3 characters, chain name only a single character,
atom number - 5 digits.
The CIF format is a narrowed down derivative of a format called STAR.
Both are used only in structural sciences,
although they provide a general syntax for storing any data,
similarly to XML, JSON, YAML, TOML, etc (and CIF is older than XML!).
Usually, CIF is used together with a dictionary (think XML schema).
It was first used in the small molecule world.
About 20 years ago it was adapted to be the successor of the PDB format, called mmCIF. mmCIF uses CIF 1.1 syntax with a different dictionary.
One visible difference is that mmCIF has dots in tags (_cell.length_a instead of _cell_length_a).
Some software developers designed own file formats for their programs.
So we also have a number of software-specific formats. This is a natural thing.