MS-DOS and derived systems use backslash
\ for path separator and slash
/ for command parameters. Unix and a number of other systems used slash
/ for paths and backslash
\ for escaping special characters. And to this day this discrepancy causes countless woes to people working on cross-compilers, cross-platform tools, things that have to take network paths or URLs as well as file paths, and other stuff that you'd never imagine to suffer from this.
Why? What are the origins of this difference? Who's to blame and what's their excuse?