Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

If it is true that all Windows files with the ".exe" file extension are considered "applications", is NTOSKRNL.exe, the Windows kernel, an "application", or is this an exception to the rule? What about the Unix and Linux kernels?

share|improve this question

This is a matter of symantics.

According to Webopedia :

An application is a program or group of programs designed for end users. Application software can be divided into two general classes: systems software and applications software. Systems software consists of low-level programs that interact with the computer at a very basic level. This includes operating systems, compilers, and utilities for managing computer resources.

In contrast, applications software (also called end-user programs) includes database programs, word processors, and spreadsheets. Figuratively speaking, applications software sits on top of systems software because it is unable to run without the operating system and system utilities.

So, by this definition, the Windows Kernel is a systems software application. And programs like Microsoft Word is considered application software. However, I dont know anyone who uses these terms. People call them programs or applications.

share|improve this answer
Thank you. So from your perspective, "any" executable program, even an OS kernel, is an "application" (the two terms being 100% equivalent)?? Also, I never understood the Webopedia definition when it states that "application software" is one of two general classes of "application software." – Confused Oct 16 '13 at 21:30
"application" doesn't have a denotative definition in common usage, so its inherently ambiguous. "executable" however does, so I prefer to use it. – Frank Thomas Oct 16 '13 at 22:21

An executable file is a type of file, just like configuration files (.ini), icon files (.ico), dynamically loadable libraries (.dll), audio files, video files, text files, word document files, etc. In dos and windows, the extension .exe is used to mark a file having executable binary instructions (in a particular format that the OS recognizes).

Application software (not file) is software used by end users (as mentioned in the comment pointing to webopedia) which can include one or more executable files, configuration files, data files (internal data), icon files, dll files (or .so for unix), audio/video files, etc. We cannot just take winword.exe in a flash drive and call it application software since it will not even run without the other supporting files. But winword.exe is an executable file.

NTOSKRNL.exe that is mentioned in the question is just one executable file (having the right format for the OS to open it and run it as a single program). It is not an application software since it is meant for the internal operation of the OS (and hence called system software).

share|improve this answer

No. The operating system comprises the kernel and system libraries that provide the API (Application Programming Interface) that applications consume.

So the kernel is certainly an executable, but not an application. This is an argument over semantics, but the word "application" is right in that TLA (Three-Letter Acronym) -- so the argument is pretty clear.

Further suppose that you are running Java, which provides its own API, on Windows. The Java virtual machine and runtime is a Windows application; which itself hosts Java applications. But the Java VM/runtime is never thought of as a Java application.

share|improve this answer

.exe files are in a format called "Portable Executable" - which supports other types of files than .exe. Windows executables run under one of (or none of) several different subsystems in Windows.

Your typical Windows "application" is a standard or .NET Win32 executable. These run under the Win32 subsystem which is the typical Windows subsystem, .NET applications of course requiring a .NET framework on top of that.

There are also POSIX and OS/2 (deprecated) subsystems. If you install Services for Unix Applications, I believe you will then be able to launch POSIX-subsystem executables.

Executables that don't run under any subsystem are native. This includes autochk.exe - the version of chkdsk that runs before Windows starts, the central Win32 subsystem executable csrss.exe and ntoskrnl.exe and related. (I used the to verify - the info is in "Optional Header")

UPDATE: Looks like even though it's "marked" as a native application it really isn't. The Wikipedia article on ntoskrnl.exe explains.

This system binary is not a native application (in that it is not linked against ntdll.dll), instead containing a standard main entry point, a stub that calls the kernel initialization function but is unused as the OS loader (internal symbol OSLOADER) calls KiSystemStartup directly.

You can't launch a native application from the Win32 subsystem, so this is why when you click on C:\windows\system32\ntoskrnl.exe you see an error message stating it can't be run from Win32 mode.

Linux kernels are packaged in the ELF format, the same that is used for executables under Linux. I imagine under other UNIX-like operating systems it's merely a binary file directly executed by the platforms booloader.

I haven't ever tried to run /boot/vmlinuz directly. I'm going to try to do that and update with the results.


root@my_cool_computer:/boot# ./vmlinuz-3.2.0-4-amd64 
No protocol specified
No protocol specified
No protocol specified
No protocol specified
No protocol specified
No protocol specified
err:process:create_process starting 64-bit process L"Z:\\boot\\vmlinuz-3.2.0-4-amd64" not supported in 32-bit wineprefix
wine: Bad EXE format for Z:\boot\vmlinuz-3.2.0-4-amd64.
No protocol specified
No protocol specified
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
err:systray:initialize_systray Could not create tray window

Scratching my head on this one ... I hope this helps.

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .