Draft 0.2 plan

The document lays out the feature set for the next major release of JNode designated release 0.2.

This plan is intended to guide the development towards our first major release. It is not a fixed plan that cannot be deviated from. Suggestions & remarks are always welcome and will be considered.

Release target

We want this release to be the first usable version of JNode where we can run real world Java programs on.
This means that we need a working filesystem, a stable virtual machine, a class library mostly compatible with JDK 1.1, a working TCP/IP implementation and way to install it on a PC. It is not expected to have a fully working GUI yet.

Additional features

To achieve the target outlined above, each team will have to add/complement a number of features. These features are listed below. The percentages specify finised work, so 100% means completed.

JNode-Core

  • 100% - Dynamically (re)loadable plugins
  • 10% - Plugin install, upgrade & uninstall framework
  • 50% - Second level native code compiler target as good (native) code quality
  • 100% - Security system
  • 0% - Setup utility
  • 80% - Implementation of java.lang package
  • 80% - Implementation of java.math package
  • 60% - Implementation of java.security package
  • 90% - Implementation of java.util package
  • 80% - Implementation of java.util.jar package
  • 80% - Implementation of java.util.zip package

JNode-FS

  • 80% - Virtual filesystem (in progress)
  • 60% - Implementation of java.io package
  • 90% - R/w ext2 implementation
  • 20% - R/w fdisk services
  • ? - Format services for ext2
  • 95% - ATAPI driver
  • 95% - CDROM (ISO9660) filesystem

JNode-GUI

  • 0% - Textmode userinterface for use in installer

JNode-Net

  • 25% - TCP/IP stack, client & server
  • 75% - Implementation of java.net package

JNode-Shell

  • 100% - Commands to modify the classpath
  • 100% - Commands to run java code, both .class and .jar files from any location

Release milestones

Right now no date is set for this release. There will be intermediate releases reflecting the state of development on the 0.1.x series until the target is reached.

Looking towards the future; 0.3

The next major release after 0.2 should bring a graphical user interface, we should really consider using J2SDK 1.5 features like generic types and add numerous drivers for CDROMs, USB, Video cards.

Additions

I'm glad to see the targets set so clearly above. However I think there are at least two notable features missing from the list.

1. R/W vfat, fat32 filesystem support. This is the most used filesystem type on current desktops. It would be really important to be supported as soon as possible. Maybe we should post a TODO item for this.

2. While I was making charva work on JNode I found a big problem. At the moment only one charva instance can be run in Jnode at once or only one charva based application. It is so because charva relys on static variables and singletons while dealing with a console, and background threads. It is also hard to exit a charva application. I I tried a workaround but since this problem should be addressed on the kernel and VM level it doesn't make much sense further hacking it. This is only one little example of a complex problem.

JNode needs isolates. Most of the Java applications assume that they are alone in the JVM and they are written like that. Further when you call System.exit() the aplication should exit (all related threads die) and when you don't call system exit the JVM exits when the last non-demon thread terminates by itself.

The java shell command would need to start a seprate isolate where the static data in the classes is held separately per isolate and System.in, System.out, System.err, System.exit() and so on have a meaning similar to that in a JVM instance.

In case of JNode as an OS this is much more important than in the case of a JVM running as a separate OS process. So much that the lack of it makes development harder already.

WHEN will these issues be addressed? What are the current plans for it?

Levente

Agree but

I agree that both topics are really needed, but i don't think their are essential for 0.2, however if we can find people to do it, (especially) fat32, it would be great to include it.
Isolates are a real wish, but due to the VM consequences I would propose to delay that till 0.3.

fat32 read only

Without MS permission I think fat32 would need to be read only.

ServiceManager

The ServiceManager is nearing an initial release.
The SM handles install and removal of services at runtime. Removal is synchronous an very clean. The ServiceManager also handles the issue of service versions.

Security was a design isue for the SM from the begining, so before I wrote it I took the liberty of designing a user security model. The primary classes in the model are User and UserManger.

UserManger acts something like a certificate athority. You give it a username and password and it gives you a certified User object.
User is final and not serializable. Any client that recieves a User object as credentials need not wory about verifying that such a User exists, because the UserManager has already verified it.

User contians name/id pairs for the user, primary group, and alternate groups.

This user model does not have any connections to java.security.

It may be that my user system is insufficient for use in Jnode, but it has several ineresting benifits that I think should be considered.

multiuser and more.

its a strange world to be starting an OS from scratch again.

What are the plans for multiuser support? How multitasking is it?

I think JNode is a chance to do much more than to reinvent linux in java. The Association for Computing Machinery (ACM.org) has a couple decades of some very good papers of Operating System topics that havent seen the light of day.

Id like to see JNode grow with a distributed operating system frame of mind. I would define that as datastructures and processes that can easily migrate from JVM to JVM and machine to machine. Java, I feel, leads the way in this area with is serializability and virtual machine.

Also a graphical environment that tries something new would make JNode stand out. Something completely different than the tired paradigm of simulating pieces of paper in a 1970's office (drawers, a desktop, etc).

why don't you do it?

If you have ideas pls come forward..start and implement them and we all will support you. We do this OS in free time that means noone has time to read milions of pages about OS design and stuff..we learn as we go..as everyone did.