A1. What is a software architecture?
A software architecture is a model of how thing fit together. Like architecture from the construction industry, it is an abstract model or design. It is the legacy from the past or a plan for the future. A software architecture is used by developers to construct software.
A2. Does JOS have an architecture?
Yes, JOS has an architecture. The architecture of JOS is partially implemented in the source code for jJOS and decaf. Improvements to jJOS and decaf are to be expected.
A3. What makes the JOS architecture different?
JOS is different. It has few requirements. It includes general plans for big pieces of the operating system, like a kernel and virtual machine. [JOSystem] A Java(tm)-based virtual machine is one requirement.
JOS uses a loosely coupled architecture. It leaves the details of the interconnections between components up to the component designer. The interface between jJOS and decaf might be different than the interface between jJOS and another virtual machine, or between decaf and another kernel. A combination of kernel and virtual machine implement a Java(tm)-compatible platform.
A4. When will the architecture be finished?
The architecture is subject to small changes over the long term. Since it grows dynamically, it will never be finished in a classic sense. By designing software for the architecture we find way to improve the architecture itself. This changes the way we design software in the future.
A5. Is the architecture fully documented?
No, it is not fully documented in a traditional (non-Internet) specification. The architecture is discovered by reading the source code. Additional information is derived from messages on mailing list archives and articles on JOS Wiki.
If you would like to help us fully document the architecture, read the source code and announce your articles to the architecture mailing list.
Who decides what the JOS architecture looks like?
That's easy. A programmer writes code that works. If other members of the project like it, they use it. By improving the working code, the architecture is improved, too.
If it is difficult for a programmer to write code that works, part of the architecture is undefined or cannot be implemented yet. Through a completely natural process, the architecture matures to handle the kinds of code programmers want to write.
Are there options?
Each programmer might have their own personal preferences. When working on programs for the group, use the preferences of the group. One method is preferred for the group; others are optional.
Competition is a good thing. Alternatives enable us to use the best of the best. Alternatives are part of the goal of the open-ness of the JOS project. Alternatives are not destroyed; they are shelved. You can always use a shelved alternative if, for some reason, it helps you get your work done.
J1. Is JOS a kernel?
No, JOS is not a kernel. JOS is an operating system that runs on a kernel. (You can write and compile your own.) jJOS is currently our favorite kernel.
J2. Is JOS a virtual machine?
No, JOS is not just a virtual machine. JOS is an operating system that runs on a virtual machine. (You can write and compile your own.) decaf is currently our favorite virtual machine.
Does JOS depend on a foreign operating system, like Sun Microsystems' java
tool?
JOS is an independent operating system; it does not depend on another operating system for its runtime functionality. [1]
J3. Is JOS a new version of Linux?
No, JOS is something different. It is not MS-DOS, Linux, OS/2, MS-Windows, nor UNIX. [1]
Does JOS need a Java compiler, like Sun Microsystems' javac
tool?
No, JOS is fully independent of the tools necessary to create it. JOS uses a standard class file format produced by many different assemblers and compilers. Classes are compiled on a foreign operating system and copied -- verbatim -- to JOS.
Does JOS need a C/C++ compiler?
No, JOS is not used to build JOS. A foreign operating system (like Linux) is used to build a kernel and virtual machine. The purpose of JOS is to run bytecode, not machine code.
When one operating system builds programs for another, this is know as cross-compiling. Someday, JOS might have a C/C++ compiler. It is an application. It is not a high priority. Such a compiler must written in bytecode and emit bytecode.
What format does JOS use for its native executables?
The native executable format for JOS is the class file, as documented in the Java(tm) Virtual Machine Specification(s). [2]
JOS is an operating system for executing class files. Since this is the native executable format, executable programs and shared libraries are distributed as class files. The native code in JOS is bytecode, not machine code.
Does everything on JOS have to be written in the Java(tm) programming language?
JOS is language-agnostic, requiring neither the Java(tm) language, nor the Java(tm) class libraries. [4] That is, the Java(tm) platform runs on top of JOS. In fact, the Java programming language is not required by JOS. JOS runs any class file created by any programming language.
Does JOS require standard class libraries to be fully implemented in every case?
No, JOS is not Java(tm). Given that JOS is language-agnostic, it, and the libraries with which it is distributed, are not limited to or by the capabilites of the Java(tm) platform. [4] JOS does not require all the standard class libraries as defined by Sun Microsystems. A virtual machine only depends on a few classes in the java.*
namespace and they are required. Otherwise, only the classes actually used by your special purpose application need to be implemented.
Q1. If JOS is not Java(tm), what is it?
JOS is a host for Java(tm). Java(tm) programs run on top of JOS. JOS does not run on top of Java(tm) Platform. JOS is not based upon Java(tm), but executes Java(tm) class files.
A general purpose version of JOS implements all of the classes for a Java(tm) Platform as defined by Sun Microsystems. Any Java(tm) application runs on this version of JOS.
[1] http://cjos.sourceforge.net/redist/mail/arch/2000-January/000384.html
JOS is an independent operating system; it does not depend on another operating system for its functionality. It is not MS-DOS, Linux, OS/2, MS-Windows, nor UNIX.
[2] http://cjos.sourceforge.net/redist/mail/arch/2000-January/000387.html
JOS is a Java(TM)-based operating system. Therefore, JOS is written in Java wherever possible, and its native executable format is the Java class file.
[3] http://cjos.sourceforge.net/redist/mail/arch/2000-January/000388.html
The native executable format for JOS is the class file, as documented in the Java(tm) Virtual Machine Specification(s).JOS is an operating system for executing class files. Since this is the native executable format, executable programs and shared libraries are distributed as class files.
[4] http://cjos.sourceforge.net/redist/mail/arch/2000-January/000389.html
Therefore, JOS is language-agnostic, requiring neither the Java(tm) language, nor the Java(tm) class libraries. That is, the Java(tm) platform runs on top of JOS.Given that JOS is language-agnostic, it, and the libraries with which it is distributed, are not limited to or by the capabilites of the Java(tm) platform.