Yes.

Early operating systems have been written entirely in the Assembly language dialect of their respective CPU, and even in modern OSes there are parts that can only be done in Assembly Language. Several other high-level languages have been used for OS development in the past, including Lisp, FORTH, C++, Modula-2, Ada, Bliss, and PL/1. In those cases, a fair amount of ASM/C development is required, however, in order to provide the appropriate runtime environment supporting the language's abstractions.

Yes, but ...

However, not all languages are suitable for low-level system programming, or have suitable low-level development tools available for them. Even those which are suitable often require specific runtime support, where C does not. Also, the vast majority of OS related resources (like tutorials, and how-to examples, including this FAQ except where noted otherwise) assume C as the primary development language, so an OS developer should at least be able to read C code.

So, using a language other than C entails a good deal of extra effort. But there are some developers who are willing to put in that effort in order to use their preferred notation.

On the other hand, trying to write an OS in interpreted languages like Perl, Java or Basic is unlikely to succeed. There are research projects about it, of course, but nothing that has completely changed the way we write kernels so far. And trying to write it in PHP, Javascript or .Net would just be a proof you've much to learn...

Can I use language XYZ?

If you'd like to know if your favourite language is suited for OSDeving, just consider the following questions:

If any of those question turns out to "whoops, no, I cannot do that with language XYZ", then chances are that XYZ will be of no help for OS development - or will have to be mixed with other languages and stubs to function.

Can't I write a compiler for XYZ?

The only thing more complex than writing a compiler is writing an operating system. As you are already planning to do the latter, deciding to do the former also is like finding new ways to forge metals in order to build a better car. We will not keep you from it, but this Wiki (and the forum) are not the right place to look for information or help.

The canonical starting point is the "dragon book" ("Compilers - Principles, Techniques, and Tools", by Aho, Sethi and Ullman).

Other first-grade resources on compiler building may be linked here, but please do not add content on that subject to the Wiki: it is about OS development only. Related questions might be posted in the General Programming board; however there are other net communities out there that focus on compilers.

"But I heard of an OS written in language ABC, isn't it interpreted?"

You may from time to time hear of operating systems written in languages which are usually interpreted, or which used an interpreter of some sort: JavaOS, Generra (the Symbolics Lisp Machine OS), Smalltalk-80, USCD Pascal, the various FORTH systems, etc. Most of these fall into one of three categories:

The FORTH systems are a special case in and of themselves. While FORTH is technically an interpreted language, the 'stack-threaded' interpreter it uses works differently from most other interpreters; in effect, it walks through the various FORTH 'words' that the code is comprised of until it reaches the low-level words that are implemented in assembly or compiled code, which is what actually gets executed. Furthermore, FORTH systems incorporate a special sort of assembler, which produces code specifically meant to be used by the interpreter; also, commonly used 'words' can be compiled into native code as needed. Finally, many embedded FORTH systems use special-purpose hardware to support the language.