This discussion reminds me of a true story from 24 years ago that might
interest or amuse. I wanted to look at the label on a disk so adopted a
"minimum keystroke" solution:
cp /dev/rsd0b copy_of_label
^C
To my surprise, the data in 'copy' was scrambled, i.e. odd and even
shorts were swapped. (Or maybe I just got 'kernel panic.' After all
these years, I may be conflating two related stories. In any event the
'cp' did not do what it should.)
The error was quite repeatable: running 'cp' on any raw scsi partition
would exhibit the same problem with that release. I'll guess it wasn't
something users did a lot.

And, every time 'cp' was recompiled
after minor changes it had a 50-50 chance of functioning correctly.
There were four bugs or bug-like features interacting:
(1) The SCSI controller hardware operated properly only on 4-byte
aligned buffer addresses.
(2) The SCSI driver neglected to cheeck for that alignment.
(3) The program cp.c (which used mmap() for most reads) did reads from
special devices with simply
char buffer[512];
read(infd, buffer, 512);
(4) The cc compiler, faced with a declaration like "char buffer[512]",
saw fit to guarantee 2-byte alignment, but not 4-byte alignment.
I thought this strange episode had instructive features. The clearest
bug might be (1), but it was more-or-less unfixable. Why make a
complicated hardware change to accomodate a yokel who reads disk-labels
with 'cp'? (2) was a blatant stupidity, but correcting it wouldn't
completely solve the problem: The yokel would still get IO_error,
though that is much better than scrambled data or kernel panic.
Neither (3) nor (4) were considered "bugs" -- both the compiler and cp.c
were doing that which they were allowed to do by specs. At the same
time, it seemed both simple and appropriate to fix the problem by
amending cp.c and/or the compiler.
cp.c could be fixed with, for example

-) )
char xbuffer[512+2];
#define buffer (xbuffer + (2&(int)xbuffer))
And, it seemed possibly sound to add the following logic to the C
compiler:
/* If the character array size is a multiple of 512 , then
* force it to be at least 4-byte aligned unless the array is
* inside a structure. Any storage wastage will be quite small,
* and it's likely to boost performance at least slightly, as well
* as fixing bugs like 'cp /dev/rsd0b.'
*/
I was working as a contractor for a large company, and reported the
situation, through channels to the hardware group's ambassador to the
guru group. I wish I'd saved the e-mail he sent back. It was something
like this:
I have been to the mountaintop, and the following is
inscribed in stone:
The alignment requirement for character arrays is Two,
and Two is the alignment requirement for character arrays.
A fix for cp.c would take 2 minutes of coding labor (no, I wouldn't
really fix it as above) and several hours in the Bug Tracking and
Approval program. cp's maintainer was uninterested: his program "did
nothing wrong."
AFAIK, 24 years later a 'cp /dev/rsd0b' still has a 50-50 chance of
failure.
James Dow Allen