Ви можете задати собі кілька питань, щоб скористатися практикою вирішення цього питання.
- Чи спочатку система продавалася без цієї програми? Angry Birds може бути "додатком-вбивцею" для смарт-телефону (причина, чому хтось купує його), але це все ще окремий сторонній додаток, написаний задовго після введення телефону. Написати це було б програмуванням програм. Але драйвер дисплея того ж смартфона має важливе значення для його використання, тому це було б програмуванням систем.
- Чи можете ви уявити, як перенести код на іншу платформу, не в основному переписуючи її? TeX і
troff
були перенесені практично в будь-яку систему з невеликими змінами, тому вони є додатками, хоча вони розташовані внизу ланцюжка інструментів, якими зазвичай користуються люди. Файлова система, на яку TeX записує свій вихід, наприклад, UFS або VFAT, є прикордонним випадком. Ви можете перенести файлову систему в іншу ОС, якщо вона була абсолютно приголомшливою, але зазвичай люди просто переймають приголомшливі ідеї та записують власну файлову систему для своєї ОС. Це робить програмне забезпечення файлових систем.
- Чи реалізована функціональність в ядрі або в окремих двійкових файлах? (Файлові системи тут також займають середнє місце. Багато частин багатьох файлових систем насправді є кодом ядра, але багато мають значну частину в просторі користувача.) Драйвери графічних дисплеїв можуть в принципі бути підключеними зовнішніми компонентами, але вони часто реалізуються в ядрі або принаймні з привілейованим прямим доступом до ядра (або навіть до апаратного забезпечення). Це було б програмування систем. З іншого боку, комп'ютерні ігри, які використовують стек графічного дисплея, - це програми.
На ваші запитання, написання ОС Android, безумовно, було програмуванням систем. Написання програми, яка використовує Windows API-дзвінки, - це програмування програм. Це не так портативно, як якщо б ви використовували крос-платформні бібліотеки, такі як SDL або OpenGL, але в принципі це можна перенести, це сторонній код і працює в просторі користувача. Консольний додаток, який розкриває стан ядра Linux, - цікавий продуманий експеримент. Я б точно сказав, що це передбачає системне програмування, оскільки вам потрібно було б багато знати про структуру Linux (зауважте, що "Linux" належним чином є лише ядром, а не дистрибутивом), щоб писати, і, ймовірно, навіть використовувати його!