It’s interesting to read the specification for “simple” technologies which have existed for quite a long time, and then compare that to real-world implementations. One example of this I have come across today is the vCard format, and the vCards produced by Apple’s Address Book.

Version 3.0 of the vCard spec specifies two valid encoding types for records (e.g. the PHOTO type record), either 8bit (for text fields) or b (which is the BASE64 encoding type specified in RFC2045). Apple’s Address Book exports records in vCard 3.0 format with “PHOTO;BASE64:”.

It also exports them with CRLF line endings, rather than the LF type required by the 3.0 spec (CRLF was used by the 2.1 specification).

It also doesn’t wrap binary encoded data to the recommended 75 characters.

There are worse things wrong with Apple’s Address Book than this of course. It doesn’t support some useful extended attributes, such as X-SIP, or X-SKYPE, has apparently no understanding of the KEY type, the “private field” feature doesn’t let you deselect the image, name or title etc. It’s just interesting to see the ways that specifications aren’t followed in the real world – and gaining an understanding of that is very important to write interoperable software, almost as important as reading the specification…