假设有A、B两个程序, 这两个程序可能是同一小组的两个人来维护的,也可能是两个不同小组来维护的, 也可能是两个不同部门来维护的,甚至有可能是两个不同的公司来负责维护的。
现在假设A程序对某函数进行了修改,比如原先通过 kill(pid, SIGSTOP)向B程序发送SIGSTOP信号,而现在却通过 kill(pid, SIGUSR1)向B程序发送SIGUSR1信号。 原先B程序是在收到SIGSTOP这个信号之后才去做相应的处理, 而A程序改成了发送SIGUSR1,从而导致问题的出现。
通常这种不向后兼容的情况有: 1. A程序接口参数变化,这会导致B程序出现编译时或运行时错误; 2. A程序接口功能减少,这会导致B程序功能的减少; 3. A程序接口移除,这会导致B程序运行时错误。
实例演示: 1. A + B OK; 2. A + C OK,但是A + B NG; 这里A类似于库函数,而B和C类似于基于库函数的应用程序。 向后兼容是对函数或功能提供方提出的要求。
问题: A1 + B OK; A2 + C OK; 那A1 + C呢? 这里是对应用程序的要求(有难度)。