나머지는 모두 새로운 기능이다. 즉, 프로그래머가 의도한 방식에 따라 의도한 동작을 프로그램이 정확히 수행하는데도 사용자의 기대에 못 미친다면 새로운 ‘기능’이 필요하다는 말이다. 이것이 ‘기능’과 ‘버그’ 정의의 차이다.
하드웨어에도 버그가 있을 수 있으니 주의하자. 프로그래머가 ‘컴퓨터 폭발’을 의도하는 경우는 거의 없다. 그러므로 프로그래머가 프로그램을 작성해 작동시켰는데 컴퓨터가 폭발한다면 하드웨어에 버그가 있었을 가능성이 높다.
프로그래머가 컴퓨터의 능력을 벗어나는 작업을 시킨 게 아니라면 기본적으로 프로그래머의 의도가 온전히 실현되지 못하게 막는 모든 것을 버그라고 볼 수 있다.
예컨대 프로그래머가 컴퓨터에 ‘세상을 정복하라’라고 명령했다고 상상해보자. 컴퓨터는 세상을 정복할 수 있도록 설계되지 않았으므로 이 경우 ‘세상을 정복하라’라는 새 기능이 필요하다. 이는 버그가 아니다.