Why wouldn I always use a protocol that requires a BOM?
Where the data is typed, such as a field in a database, a BOM is unnecessary. For example, if a text data stream is marked as UTF-16BE, it is unnecessary to have a BOM. In fact, it is very undesirable to tag every string in a database or set of fields with a BOM, since if the strings are concatenated without removing the BOM you get into trouble. Moreover, it also means two data fields may have precisely the same content, but not be binary-equal (where one is prefaced by a BOM).
Where the data has an associated type, s h as a field in a database, a BOM is unnecessary. In particular, if a text data stream is marked as UTF-16BE, UTF-16LE, UTF-32BE or UTF-32LE, a BOM is neither necessary nor permitted. Any U+FEFF would be interpreted as a ZWNBSP. Do not tag every string in a database or set of fields with a BOM, since it wastes space and complicates string concatenation. Moreover, it also means two data fields may have precisely the same content, but not be binary-eq l (where one is prefaced by a BOM).