Est. 1988 Intermediate

Genesis 2

The procedural Script Language Interpreter of GENESIS, the GEneral NEural SImulation System, first released from Caltech in 1988 and used for two decades to build biologically realistic models of neurons, networks, and biochemical signaling pathways.

Created by Matthew A. Wilson, Upinder S. Bhalla, John D. Uhley and James M. Bower, in the laboratory of James M. Bower at Caltech

Paradigm Procedural and imperative: typed variables, C-style control flow and user-defined functions, driving an object/element model that is created and wired together by command
Typing Static and explicit but minimal. The interpreter has exactly three variable types - int, float and str - declared with a leading type keyword. Element fields are typed by the compiled C object that defines them
First Appeared 1988
Latest Version GENESIS 2.4 (November 2014). Post-release fixes continue in the genesis-sim/genesis-2.4 repository on GitHub, whose most recent push at the time of writing was in November 2021

Genesis 2 is the scripting language of GENESIS, the GEneral NEural SImulation System - a simulation platform written at Caltech in the late 1980s to let neuroscientists build biologically realistic models of nerve cells and the networks they form. The language itself is deliberately small: three data types, C-shaped control flow, and a few dozen commands. Almost all of its expressive power comes from what those commands operate on, a tree of simulation objects implemented in C and wired together by message passing. Learning Genesis 2 is less about learning syntax than about learning the object library.

The name is a retronym. From 1988 until the mid-2000s the software was simply GENESIS; the label “GENESIS 2” came into use only once GENESIS 3 was under development and the project needed a way to distinguish the stable, procedural, script-driven original from its declarative successor. The project’s own home page adopted the split, describing genesis-sim.org/GENESIS as “the home page for the stable, ‘classic’ GENESIS 2 simulator.”

History and Origins

GENESIS was built by Matthew Wilson, Upinder Bhalla, John Uhley and James Bower in the Division of Biology at Caltech, and released in June 1988 for the first annual Methods in Computational Neuroscience course at the Marine Biological Laboratory in Woods Hole. That teaching context shaped everything about it. The system had to be usable by biologists in a summer course, not only by the people who wrote it, so it shipped with a graphical interface - XODUS, the X-based Output and Display Utility for Simulators - and a command language that could be typed at a prompt as readily as saved in a file. Public release beyond the course followed in July 1990.

At the 1988 NIPS conference the group presented the system under what was reportedly a slightly different expansion of the acronym: GEneral NEtwork SImulation System. The paper describes the scripting layer as “a set of simulator and interface functions that can be executed interactively from the keyboard or from text files storing command sequences (scripts),” providing “arithmetic operations and program control functions such as looping, conditional statements, and subprograms or macros.” That is a fair description of the language a quarter-century later. By the time of the second edition of The Book of GENESIS in 1998, the middle word had become NEural, reflecting where the user base had actually gone.

The design constraints of 1988 are visible throughout. The paper reports the simulator at about 20,000 lines of C with a comparable amount of graphics code, and, according to the same source, executables of roughly a megabyte and per-element memory costs on the order of a hundred bytes - the kind of accounting a modeller needed when deciding how large a network would fit in memory. The one published performance figure is similarly period-specific: the piriform cortex model is reported as running at approximately one second per simulated time step on a Sun workstation of the day, with the machine’s few megabytes of RAM as the binding constraint. That is a single 1988 model measured on a single 1988 machine with no comparison baseline, not a general benchmark, and the paper is careful to say that “the overall efficiency of the GENESIS system is highly simulation specific.”

Design Philosophy

Three ideas hold the language together.

Objects and elements. GENESIS distinguishes an object - a compiled C template, such as compartment or a Hodgkin-Huxley channel - from an element, an instance of that template living in the simulation. The documentation is explicit that this inverts the usual vocabulary: a GENESIS object is what Java or C++ would call a class, and a GENESIS element is what they would call an object. Adding new physics to GENESIS means writing a new object in C and linking it in; the scripting language never had to grow to accommodate it.

A filesystem for the model. Elements live in a hierarchy addressed exactly like a Unix path. /net/cell[1]/dend[2]/GABA names an inhibitory synaptic conductance on dendritic compartment 2 of cell 1 of a network. Indices, wildcards and relative paths all work as a shell user would expect. This is the single most quoted design decision in GENESIS, and it made scripts that build thousand-cell networks by looping over indices feel natural rather than clever.

Messages, not calls. Elements do not invoke each other. They exchange messages, established once by addmsg and delivered by the simulation engine on every step. Each object knows its own fields and the actions it performs when the engine issues, say, a PROCESS step - solving the Hodgkin-Huxley equations for a channel, or plotting a point for a graph. The script’s job is construction and control; the numerics happen in C.

Scripting as interface, not as afterthought. Because objects were precompiled and linked in, a modeller could develop a simulation interactively without ever quitting to recompile. In 1988 this was the difference between a usable tool and an unusable one.

The Language

SLI - the Script Language Interpreter - is a shell-like interpretive environment with C-like syntax. Commands take the form routine-name arg1 arg2 -option optarg, statements end at a newline or semicolon, and expressions in braces are evaluated and substituted into arguments. Operating system commands can be run from the same prompt.

There are exactly three variable types:

int    a
float  PI = 3.141593
str    hi = "hello there"

Variables declared inside a function are local; those declared at script level are global. Strings concatenate with @. Control flow is if/elif/else/end, while/end, C-style for (init; test; incr)/end, and foreach/end over an argument list. Functions are declared and terminated by keyword:

function function-name [(arg1 [, arg ...])]
  statements
end

The canonical first program is tutorial1.g, a single compartment with a current injection and a plot:

//genesis script for a simple compartment simulation (Tutorial #1)

// create a parent element
create neutral /cell

// create an instance of the compartment object
create compartment /cell/soma

// set some internal fields
setfield /cell/soma Rm 10 Cm 2 Em 25 inject 5

// create and display a graph inside a form
create xform /data
create xgraph /data/voltage
xshow /data

// set up a message (PLOT Vm) to the graph
addmsg /cell/soma /data/voltage PLOT Vm *volts *red
addmsg /cell/soma /data/voltage PLOT inject *current *blue

// make some buttons to execute simulation commands
create xbutton /data/RESET -script reset
create xbutton /data/RUN -script "step 100"
create xbutton /data/QUIT -script quit

check // perform a consistency check for each element
reset // initialize each element before starting the simulation

Everything characteristic of the language is in those twenty lines. create instantiates an object at a path. setfield assigns named fields. addmsg wires a source to a destination with a message type and arguments. Widgets are elements too, created and messaged the same way as compartments - which is why a GUI can be assembled by the same script that assembles the model. And check, reset, step are the simulation control verbs, available identically from a script, a button, or the prompt.

Evolution

The 2.x line was maintained for two decades, largely by Dave Beeman, who announced essentially every release on the BABEL users list.

MilestoneWhenNote
First releaseJune 1988MBL Woods Hole course; general public release July 1990
1.4.21994Last of the 1.x line; 2.0 beta testing begins the same year
2.0.xmid-1990sIn circulation on Linux by 1996
2.1~1997Shipped on CD-ROM with the 1998 second edition of The Book of GENESIS
2.2July 2001Public release of GENESIS and PGENESIS together
2.2.1June 2003Announced as the “final release” of the line
2.3March 2006Intended last of the series; effort moves to GENESIS 3
2.4November 2014Forced by continued user contributions; still the current release

The pattern is unusual and worth noticing: twice the project declared a final release, and twice the user community kept contributing enough that another one became necessary. The 2.4 release notes read like a list of things people needed and wrote themselves - spike-timing-dependent plasticity objects that work with the fast hsolve integrator, network connection commands supporting distance-dependent probabilities and periodic boundary conditions, the chemesis library for calcium and second-messenger modelling, and an autoconf build system, so that ./configure was intended to work on then-current Linux and macOS systems.

Platform support followed the same drift. The 1988 system targeted Unix and the X Window System, and was developed on the Sun workstations of the era before being ported to other contemporary Unix hardware. The project’s later documentation states that GENESIS runs “under most UNIX-based systems with the X Window System, including Linux, OS/X and Windows with Cygwin,” though the project publishes no comprehensive tested-platform matrix, and the 2.4 release reportedly added precompiled Cygwin binaries for Windows. The 2.x releases are distributed as open source under the GPL.

Current Relevance

Genesis 2 is dormant rather than dead, and the distinction matters. There is no active development: the last release was in 2014, the GitHub repository’s most recent push was in November 2021, and the genesis-sim.org documentation tree - reference manual, tutorials, the BABEL archives going back to 1994 - is now most reliably read through the Internet Archive. New compartmental modelling work overwhelmingly starts in NEURON, Brian, NEST or MOOSE with a Python interface, not in a bespoke shell language.

But a large body of published models is written in it, and both of its intended successors were designed around that fact. GENESIS 3, built on Neurospaces, made backward compatibility with the older procedural scripts an explicit design goal. MOOSE, from Bhalla’s group at the National Centre for Biological Sciences in Bangalore, reimplements GENESIS capabilities with backward compatibility while exposing a modern Python interface, and still reads GENESIS kkit chemical models and cell.p morphology files. The language stopped being written; its file formats did not stop being read.

Why It Matters

GENESIS was the first broad-scale modelling system in computational biology to actively encourage modellers to develop and share model components rather than each writing their own simulator from scratch - a claim the project makes for itself, and one that its BABEL archive and shared model library substantially support. That cultural contribution outweighs the technical one.

The language’s specific bequest is a set of conventions that felt obvious afterwards and were not obvious in 1988: that a simulation should be a named hierarchy you can browse and address like a filesystem; that components should communicate through declared messages rather than direct calls, so the engine owns the scheduling; that the numerical core should be compiled and the model description interpreted, so that model building is interactive; and that the same scripting layer should drive the model, the solver, and the user interface. MOOSE’s Python bindings and the model-description formats that grew into NeuroML inhabit territory GENESIS mapped; NEURON’s hoc, which predates GENESIS, arrived at a comparable arrangement independently.

It is also a clean specimen of a language type that has since largely vanished: the domain-specific command language, small enough to learn in an afternoon, whose real vocabulary is a library of compiled objects rather than the grammar itself. Genesis 2 got roughly twenty-five years of productive use out of three data types and a for loop, which is a better return on syntactic economy than most languages manage.

Further Reading

  • Wilson, M. A., Bhalla, U. S., Uhley, J. D., and Bower, J. M. (1988). GENESIS: A System for Simulating Neural Networks. Advances in Neural Information Processing Systems 1.
  • Bower, J. M., and Beeman, D. The Book of GENESIS: Exploring Realistic Neural Models with the GEneral NEural SImulation System, 2nd edition, Springer-Verlag, 1998.
  • The GENESIS Reference Manual, chapter on the Script Language Interpreter.
  • The genesis-sim/genesis-2.4 repository on GitHub, for the 2.4 sources and post-release fixes.

Timeline

1988
GENESIS and its X11 graphics layer XODUS are built in James M. Bower's laboratory in the Division of Biology at Caltech, and released in June in association with the first annual Methods in Computational Neuroscience course at the Marine Biological Laboratory in Woods Hole, Massachusetts. The system is presented that year at NIPS by Wilson, Bhalla, Uhley and Bower, where the acronym is reportedly still expanded as GEneral NEtwork SImulation System
1988
The NIPS paper describes the scripting layer that became SLI: "a set of simulator and interface functions that can be executed interactively from the keyboard or from text files storing command sequences (scripts)", with arithmetic, looping, conditionals and subprograms. It reports the simulator at roughly 20,000 lines of C plus a similar quantity of graphics code
1990
GENESIS is released for general public use in July, moving it beyond the Woods Hole course and the Caltech circle
1994
A busy year on the BABEL users list: the 1.4.2 release is announced, beta testing of GENESIS 2.0 begins, and Bower and Beeman publish the first edition of The Book of GENESIS, the workbook of tutorials that served as the language's de facto textbook
1996
The 2.x line is in general circulation - BABEL traffic from this period reportedly includes users running GENESIS 2.0.x on Linux, an early sign of the migration off commercial Unix workstations
1998
The second edition of The Book of GENESIS is published by Springer-Verlag, subtitled Exploring Realistic Neural Models with the GEneral NEural SImulation System, and ships with version 2.1 on a cross-platform CD-ROM. By this point the acronym has settled on GEneral NEural SImulation System
2001
GENESIS and PGENESIS 2.2 reach public release, announced by Dave Beeman in July, according to the BABEL list archives, after beta releases running through 2000 and a "final" beta that June. PGENESIS is the parallel and networked-computer build of the same simulator and scripting language
2003
GENESIS 2.2.1 is released in June and described at the time as the final release of the line, with precompiled Linux binaries reportedly following later that year
2006
GENESIS 2.3 is released in March and is intended as the last of the 2 series. Project effort shifts to GENESIS 3 (G-3), described by the project as "a 21st century neural simulator without the limitations of GENESIS 2 and other simulators that were developed in the late 1980's and 90's", built on the Neurospaces codebase
2014
GENESIS 2 outlives its own retirement. Continued user contributions - spike-timing-dependent plasticity objects, distance-dependent network connection commands, the chemesis second-messenger library, an autoconf build system - make a further release necessary, and GENESIS 2.4 appears in November. A GitHub repository, genesis-sim/genesis-2.4, is created the following month for continued maintenance
2021
The last recorded push to the genesis-2.4 repository. The language has been quiet since: no new release has followed 2.4, and the historic genesis-sim.org documentation tree is now reachable mainly through web archives

Notable Uses & Legacy

Piriform (olfactory) cortex model, Caltech

The flagship simulation of the original system, by Wilson and Bower. The 1988 NIPS paper reportedly uses it as its worked performance example, describing a network of four neuron types, one to five compartments each, with several channels per compartment

De Schutter and Bower cerebellar Purkinje cell model

A large multicompartmental model of the cerebellar Purkinje cell with active dendritic conductances, published in 1994 and built in GENESIS. It became one of the most widely reused reference models in compartmental neuroscience and shipped as part of the GENESIS demonstration material

Kinetikit and biochemical signaling networks

Upinder Bhalla's Kinetikit extended GENESIS 2 from membrane biophysics to biochemical kinetics with a graphical interface over the same scripting core. Bhalla and Iyengar's 1999 Science paper on emergent properties of biological signaling networks was built in this environment, and the GENESIS "kkit" model format outlived the simulator - MOOSE still reads it

Methods in Computational Neuroscience, Marine Biological Laboratory

GENESIS was written for this Woods Hole summer course and taught in it from 1988 onward. The project's own documentation claims use as an instructional tool in courses across the European Union, Mexico, Brazil and India, and at reportedly more than 60 universities

PGENESIS on parallel machines

The parallel build let the same scripts drive network models across multiple processors and networked workstations, and was released publicly alongside GENESIS 2.2 in 2001. It was one of the earlier routes to large-scale compartmental network simulation in neuroscience

MOOSE and GENESIS 3

Both successors were written to keep GENESIS 2 models alive. MOOSE, from Bhalla's group at NCBS Bangalore, reimplements GENESIS capabilities with backward compatibility and reads GENESIS kkit and cell.p files from a Python interface; GENESIS 3 was designed around backward compatibility with the older procedural scripts

Language Influence

Influenced By

C Unix shell

Influenced

MOOSE GENESIS 3

Running Today

Run examples using the official Docker image:

docker pull
Last updated: