Is compiler a system software or application software?
It is more complicated than the simple question. To a software developer, a compiler is system software. It is a given that necessary to do their work. To a compiler writer, such as myself, compiler is an application that I spends hours and hours working on to get right. But there is more to the programming language then just the compiler. By changing the code emitter of the compiler, the same source may run on different CPU instruction sets. Then there is the Run Time Library or RTL. The RTL that supports the language typically has special hooks into the OS. Therefore the RTL looks more like system software as it does things the programming language cannot do. The RTL is the secret code that allows the same source program to run on different operating systems. During the days of bundled software, the operating systems or monitor, the compilers, the editor (if any), (macro) assembler, and linker were part of the software delivered with the hardware. On 2nd generation systems, when a user program ran, there was no OS. So all I/O was under the control of the user program. The runtime library of a FORTRAN II compiler (Think IBM 709x series), provided software to handle the I/O for the user FORTRAN code. When Call EXIT was called the monitor was loaded into memory to set up the next job. So to 2nd generation programmers, the FORTRAN system (compiler and RTL) looked like system software. The compiler is just another program. Frequently a large and complex program. The there is the RTL, which provides the services to the OS so the programming language can be OS independent. The RTL is system software. When I studied at Ga Tech, my focus was on compilers. So my sub-speciality was System Software. References: Programming Languages: Design and Implementation by Pratt The C Standard Library by Plauger