A software change that is neither forward- nor backward-compatible, and which is costly to make and costly to reverse. E.g. "Can we install that without causing a flag day for all users?"
This term has nothing to do with the use of the word flag to mean a variable that has two values. It came into use when a massive change was made to the Multics time-sharing system to convert from the old ASCII code to the new one; this was scheduled for Flag Day (a US holiday), June 14, 1966.
See also backward combatability, lock-in.