Defining the term 'Operating System' is a difficult process. At the core I would say an operating system provides an application platform and responsible for initializing the processing unit into a usable state. On the most familiar end of the spectrum, we have the *nix and Windows families; providing preemptive multitasking in protected and secure environments while manging access to hardware. In another extreme we'e got embedable nanokernels such as the Arduino C++ environment which initializes the execution unit and provides methods to access underlying hardware without touching multitasking of any form (that I know of).
Possibly defining operating systems by contradiction would be better?
Some application environments provide green threads and abstract the difference between platforms. These provide the appearance of an operating system, however don't actually manage the underlying hardware and are really a library sitting in the user's environment. Java has a whole virtual machine specification, but doesn't run an operating system on top of that virtual machine.
- Linux -- Technically just a kernel; but the name is overloaded to include the userland also.