Examples of low-level programming languages are machine language and assembly language. Machine language is binary code input directly into the machine and is the earliest form of programming language. Assembly language is closely correlated to machine language and is translated directly into binary by the computer.
Machine language and assembly language are specific to each particular processor architecture; code that works across multiple platforms requires a high-level language. High-level programming languages appear more like human language than binary code and are intended to be readable by human programmers.
Low-level programming languages are still used in modern operating systems for drivers, firmware and hardware interfaces, all of which require low-level access to the processor. They are also used for reverse-engineering software and for programming malicious software that requires low-level access to the machine. High-level programming languages have replaced low-level languages for most other modern applications due to their relative ease of use compared to low-level languages and portability across multiple platforms.
The earliest high level languages, such as C, allowed programmers to incorporate low-level language code directly into higher level programs. The most common use of this function in modern systems is the Linux kernel, which embeds assembly language into its C programming.