Frequently Asked Questions about SystemJ


Q: What is SystemJ?

A: It’s a new programming language targeted at developers writing concurrent applications that also require data fusion capabilities and verifiability. SystemJ is an extension of Java to include reactivity and hierarchical concurrency (asynchronous and synchronous) in a very abstract manner. More precisely SystemJ is a Globally Asynchronous Locally Synchronous (GALS) Language.

Q: Why another programming language?

A: The current languages that provide concurrency lack mathematical foundations, which make them hard to verify. SystemJ is a verifier friendly language. Also, there are no other languages that support the hierarchical concurrency and data fusion capabilities in an abstract manner like SystemJ does. SystemJ is designed to reduce the design time by orders of magnitude as the designer does not need to worry about low level data sharing details, communication protocols and data fusion capabilities. Finally, SystemJ is well suited for a number of application domains from small systems to clusters and even AD-HOC systems.

Q: What platforms are supported with SystemJ?

A: SystemJ is compiled into Java and hence, supports all the platforms that run the JVM.

Q: How do I install SystemJ?

A: Please look at the installation instructions.

Q: How do I run SystemJ?

A: The current release of SystemJ compiler supports single threaded or multi-threaded implementation of SystemJ programs. Please look at the manual for the instructions to run SystemJ programs.

Q: How do I write SystemJ programs?

A: SystemJ supports Eclipse as the primary development environment. But, programs can even be written with a very simple text editor like Notepad or Vim and compiled at the command line.

Q: Are there any resources to learn SystemJ?

A: The authoritative resource to learn SystemJ is the SystemJ manual. Other resources are also available here.

Q: How do I report bugs?

A: SystemJ is a new language and hence, bugs are expected. We expect the community to provide support in further development of SystemJ by filing bug reports at BUGS REPORTING. You need to login before reporting bugs login:anonymous and leave the password empty.

Q: Who developed SystemJ?

A: SystemJ has been developed within the Research group for Embedded Systems at the Department of Electrical and Computer Engineering of the University of Auckland (

Q: Do you provide support for SystemJ?

A: Yes we provide professional and paid support for your application development in SystemJ. Please have a look at Support.



Q: Why does SystemJ compiler run slower on windows platform?

A: SystemJ was initially developed on the Linux platform and hence, compiler optimizations for Linux have been made. Also, the compiler itself is optimized for Linux. We are working on resolving this issue.

Q: Why does SystemJ code not run as I expect it to?

A: First please read the manual for the description of the various SystemJ constructs and their working. If this does not answer your question you should consult the forums and finally file a bug report if needed BUG REPORTING. You need to login before filing bug. Login is anonymous and leave the password field blank.

Q: Why can’t I create new clock-domains and synchronous processes at runtime?

A: The current  version of SystemJ compiler does not support forking new processes at runtime. This feature will be added to the compiler in the near future. Please have a look at the news frequently as this feature will soon be available.

Q: SystemJ compiler gives random output when compiling?

A: These messages can be ignored.

Q: Error messages are not very helpful!! What to do?

A: Please report the error messages for the code that you wrote and the error reporting will be fixed. It is a high priority TODO item.

Q: Why can’t I use the same signal to send and receive data over the same network socket?

A: Signals in SystemJ are declared to be input or output, not both. This allows easier modeling of the system during verification.

Q: Why are channels uni-directional and not bi-directional?

A: Channel based communication in SystemJ is based on rendezvous (handshake). One way channels like signals make for easier verification at a later stage.



Q: Why does SystemJ programs behave non-deterministically when running in multi-threaded mode?

A: SystemJ is a non-deterministic language. The speed of asynchronous processes (clock-domains) is not under the control of the designer as in a multi-rate system. Hence, the order of signal emissions will be different every time you run the program. What SystemJ guarantees is deterministic behavior for a single clock-domain and guaranteed data delivery across multiple clock-domains.

Q: Why does SystemJ slow down processing when running in single threaded mode?

A: In the single threaded mode all clock-domains are run cyclically, something that is needed in a safety critical environment, and hence, the run speed of all the clock-domains effects the other.

Q: Can SystemJ be run on small platforms like embedded systems?

A: Yes SystemJ has been tested on very small platforms to large server systems. Please contact us if you are looking to run SystemJ on a small embedded system.