А вообще, не верно всё это. Системность штуки не зависит от свойств самой это штуки, а зависит от того как оную штуку используют.

Ну, например, допустим есть у нас обычный такой виндовозный блокнот. Вроде бы вполне себе прикладной софт. Но если мы в нашей разработке начинаем править все сырцы в блокноте, то он становится софтом системным, потому как от ошибки в нем мы можем серьезно пострадать (например если он начнет портить исходник при сохранении), и пострадает в т.ч. разрабатываемый нами софт.

Таким образом системным является нечто как-либо участвующее в жизненном цикле продукта.

Пример нумер два -- MS Word. Вполне прикладной софт. Однако если мы используем OLE-атоматизацию в нашей программе (например для генерации отчетов), то ворд резко становится софтом системным.

Замечу, что делить на системный/прикладной можно только нечто внешнее относительно нашего кода над которым мы работаем прямо сейчас.

Это как понятие "скриптовости" языка -- сам язык не может быть скриптовым, или не скриптовым, важно используют его для скриптования или нет. Язык может лишь быть ориентированым на скриптовое применение, но от этого скриптовым он не становится.

Поэтому внешние средства могут быть ориентированными на использование в качестве системных и не ориентированными. В частности к системноориентированному софту предъявяются более жесткие требования в плане надежности (см. компиляторы например).

Ну и последний пример -- с точки зрения разработчика проекта который пишется на С++, компилятор оберона не является системным софтом. Так, прикладная игрушка.