Ninja
A scalable Internet services architecture.

Matt Welsh
Last updated 4 March 1999

Introduction. This page is Matt Welsh's Ninja project webspace. This page contains information on various aspects of the Ninja project that I'm working on, which is by no means the whole project.

For the rest you need to see the overall Ninja project pages.

Nonblocking I/O for Java. Lately I have been working on the performance-engineering aspects of building highly concurrent systems in Java. I have released a small library, NBIO, which provides nonblocking socket I/O for Java, as well as a select()-like mechanism. This is intended to support scalable Internet services in Java without the use of many threads. Here is the NBIO web page.

You can also read a paper on some of our preliminary work on defining a new concurrent systems design framework.

Jaguar. Jaguar is a system which enables direct Java access to underlying machine resources through an extensible compiler. Find out more about it right here.
NinjaRMI. NinjaRMI is a free ground-up implementation of Java Remote Method Invocation (RMI) for use by the Ninja project. This was done for several reasons: We wanted to be free to add new RMI features without relying on Sun's code, and having our own implementation, with source, is a great way to build up new systems.

Download NinjaRMI and get documentation from the NinjaRMI page.
The latest version is NinjaRMI v1.2, released on 24 November 1998.

Copyright license: NinjaRMI is covered under a University of California approved license, which makes the software free for distribution and modification as long as the original copyright notice remains entact. Read the license terms here.

If you are on the Ninja project, the code is checked into the CVS repository as classpath/ninja/rmi.

Keiretsu. Keiretsu is a demonstration of the Ninja architecture, an instant-messaging service which provides access from a number of client devices (web page applet, Palm Pilot application, or e-mail gateway to hand-held pagers). More information is available here.
iSpace and MultiSpace. iSpace is the prototype execution environment for Ninja services running on a single-node JVM. iSpace basically provides a "service server" to which individual services can be uploaded, enabled/disabled, named, and accessed remotely. In addition, iSpace enforces protection boundaries between services (by, for example, limiting system resources to externally-uploaded services, and restricting services to their own ThreadGroup).

For services which run on a collection of nodes, we have designed MultiSpace. The idea is that a MultiSpace is a collection of iSpaces working together to provide scalability and fault-tolerance. For more information on MultiSpace, see our USENIX paper.

  • Download: To access the MultiSpace/iSpace code you need to be a member of the ninja group and checkout classpath from the CVS repository. The code is in classpath/ninja/multispace.

    If you are outside of Berkeley, you can download the Ninja software release from http://ninja.cs.berkeley.edu which contains everything you need.

  • Documentation: Here you'll find a tutorial for iSpace, as well as Javadoc API documentation.
Ninja Project Glossary. Here is a first cut at a Glossary of terminology to be used by the Ninja project, really an attempt at nailing down concepts.
Pilot PPP Information. Here's a page on connecting the Palm Pilot to the Internet using Linux, PPP, and IP Masquerading.
Pilot IR Information. Here's a page on using the Palm Pilot III IR to HotSync to your ThinkPad.
Java Benchmarking. Here's a page on Java Benchmarks which might clear up some of the performance issues with the Java development environment.