The fragile binary interface problem or FBI is a shortcoming of certain object-oriented programming language compilers, in which internal changes to an underlying class library can cause descendant libraries or programs to cease working.
In these languages there were no objects in the modern sense, but there was a similar construct known as a record (or "struct" in C) that held a variety of related information in one piece of memory.
In these languages the objects were referred to by their starting point, and their public data, known as "fields", were accessed through the known offset.
If the author of the library changes the size or layout of the public fields within the object, the offsets are now invalid and the program will no longer work.
Worse, the programmer has little or no control over the resulting layout generated by the compiler, making this problem almost completely hidden from view.
Other OO languages, like Self, construct everything at runtime by copying and modifying the objects found in the libraries, and therefore do not really have a base class that can be fragile.
Some languages, like Java, have extensive documentation on what changes are safe to make without causing FBI problems.
Another solution is to write out an intermediate file listing the offsets and other information from the compile stage, known as meta-data.
Since methods tend to change more often than fields, ObjC had few FBI problems in the first place, and those it did could be corrected with the versioning system.
Additionally, the TOM language uses runtime collected offsets for everything, making FBI impossible.