SPIN README

    Overview of this File

    1. Downloading Spin
    2. Installing Spin
    3. Related software (gcc, cpp, tcl/tk wish, yacc, dot, etch, jspin, erigone, spinja, ltl2ba)

    0. Overview

    This readme file contains the guidelines for downloading and installing Spin and related software on Unix/Linux and Windows platforms. Refer to Spin's homepage for a general description of Spin, with pointers to manual pages, tutorials, introductory papers, books, etc.

    Spin is distributed freely in source form to encourage research in formal verification, and to help a support friendly and open exchange of algorithms, ideas, and tools.

      Copyright and License

      The original version of the Spin source code was developed by Gerard Holzmann at Bell Laboratories between 1980 and 1990. It was first publically released in January 1991, initially through the Netlib source code repository. It has been distributed freely since then for research and educational purposes, without any guarantee of any kind expressed or implied. On 30 December 2015 Alcatel-Lucent (the company that inherited Bell Laboratories from AT&T in the trivestiture from 1996) transfered the copyright to all sources to Gerard Holzmann, explicitly to enable a standard open source release under the BSD 3-Clause license. Starting with Spin Version 6.4.5 all Spin code, sources and executables, are now available under the BSD 3-Clause license.

      Spin is also part of the stable release of Debian, and is starting to show up in newer Ubuntu releases (16.10+), so that you'll soon be able to install it with a standard sudo apt-get install spin command.

      From the early development of the Plan9 Operating System, Spin has also been part of that distribution and versions can be found, for instance, in the version distributed by UC Berkeley.


    1. Downloading Spin

    Spin runs on Unix, Solaris, and Linux machines, on most flavors of Windows PCs, and on Macs. Precompiled binary executables for some popular types of machines are available in the Spin Binaries.

    All binaries have an extension that matches the Spin version number, such as spin649.exe. To install the binary, rename it to spin.exe and copy it into your bin directory.

    If you have machine type that is not available there, or if you are installing Spin for the first time, then follow the more detailed instructions below.

    • Unix systems:
      download the most recent .tar-file with sources, the graphical interface iSpin, documentation and examples from the Spin Distribution, and continue at Step 2a.
    • PCs (Windows95/98/2000/NT/XP):
      download the most recent pc_spin*.zip file, with a precompiled Spin executable, the graphical interface iSpin, and some examples from the Spin Distribution, and continue at Step 2b.
    • Macs (Mac OS X):
      download the most recent .tar-file with sources, from the Spin Distribution, and continue at Step 2c.


    2. Installing Spin


    2a. Installing Spin on a Unix/Linux System

      Place the *.tar.gz file from the Spin Source Distribution in clean directory, and cd to that directory. If you have a standard Unix/Linux system, unpack the archive, and compile an executable, for instance as follows:
      	gunzip *.tar.gz
      	tar -xf *.tar
      	cd Src*
      	make
      

      If you are on a SOLARIS system, edit the makefile and add -DSOLARIS to the compiler directives in the makefile before you type 'make'. Similarly, if you use a different C compiler than defined in the makefile, edit the makefile first. You need to have at least a C compiler and a copy of yacc.

      If all else fails, you can also compile everything with the following line:

      	yacc -v -d spin.y; cc -o spin *.c
      

      Spin should compile without warnings. Install the executable version of spin in a directory that is within your default search path (such as your home bin directory, or /usr/local/bin etc.)

      On Unix/Linux systems Spin assumes that the standard C preprocessor cpp is stored in file "/lib/cpp". On some systems this is different: check the comments in the makefile for details if you run into this problem.

      Testing

      To test the basic sanity of the Spin executable, or to get familiar with the basic usage of Spin, cd to the Examples directory that was created when you unpacked the source archive, and follow the instructions in README.tests file that is included there.

      Adding iSpin (Unix/Linux)

      iSpin is an optional, but highly recommended, graphical user interface to Spin, written in Tcl/Tk. To obtain Tcl/Tk, see Related software. The iSpin source can be found the iSpin/ subdirectory that will is created when you unpack the source tarfile.

      iSpin is compatible with Tcl/Tk version 8.4 and 8.5.

      iSpin prints the version numbers of Spin, iSpin, and Tcl/Tk when it starts up. You can also check separately which version of Tcl/Tk you have installed by executing the following commands in `wish' (a Tcl/Tk command):

      	info tclversion
      	puts $tk_version
      
      You can find out which version of Spin you have by typing, at a shell command prompt:
      	$ spin -V
      
      Spin and iSpin need a working version of a C compiler installed on your system.

      iSpin can also make use the graph layout program 'dot' if it is available on your system. For information on 'dot,' see Related software.

      To install iSpin run the iSpin/install.sh script (after possibly editing it).

      • invoke the program by typing
        	ispin
        or
        	ispin promela_spec
        
        For example:
        	ispin Spin/Examples/LTL/leader.pml
        
      Check the online Help menus in ispin for more details on routine use.


    2b. Installing Spin on a Windows PC

      If you just need to update the Spin executable itself, download a new version from http://spinroot.com/spin/Bin/index.html If you need more files, e.g. a new copy of iSpin, download the latest pc_spin*.zip file from http://spinroot.com/spin/Src/index.html Extract the files from pc_spin*.zip, and copy spin*.exe, renamed spin.exe, into the directory where all your commands reside and that is within your default search path (e.g., c:/cygwin/bin/, or c:\apps\spin\) You can find out what your search path is set to by typing 'set' at an MS-DOS prompt -- this prints a list of all defined variables in your environment, including the search path that is used to find executable commands. (Note that you may need to set the search path in the environment variables)

      If you use Spin from the command line (i.e., without iSpin), be warned that some command shells, e.g., the MKS Korn-shell, have none-standard rules for argument parsing (i.e., you can not reliably quote an argument that contains spaces, such as an LTL formula). In most cases this will not be much of a problem, except with the conversion of LTL formula with the spin -f option. Use single-quotes when needed, e.g.: spin -f '[]<>p' You can circumvent the problem by using inline LTL formula, which are supported in Spin version 6, or by using sping option -F instead of -f, to read the formula from a file instead of the command line.

      To run Spin, also with the precompiled version, you need a working C-compiler and a C-preprocessor, because Spin generates its model checking software as C-source files that require compilation before a verification can be performed. This guarantees fast model checking, because each model checker can be optimized to the specific model being checked. Check, for instance, if you can compile and run a minimal C program succesfully, e.g.:

      	#include <stdio.h>
      	int main(void) { printf("hello\n"); }
      

      To find a public version of a C compiler and some instructions on how to install it see Related software.

      Adding iSpin (PC)

      To run iSpin on a PC, you need the PC version of Tcl/Tk, which you can find under Related software.

      The ispin*.tcl source is contained in the .zip file of the distribution. Copy the .tcl file as is into a directory where you plan to work, or put a shortcut to this file on the Desktop or in the Start Menu. If you keep the extension .tcl, make sure it is recognized as a 'wish' file by the system, so that ispin starts when you double click the ispin*.tcl script.

      Under cygwin, copy the ispin*.tcl file to /bin/ispin and make it executable You can now use ispin as a normal Unix-style command, and you can pass the name of a filename to it, for instance as:

      	ispin leader
      

      An alternative is to start ispin from its source by invoking wish:

      	wish -f ispin.tcl
        or	wish -f /bin/ispin
      
      An even more indirect way to force ispin to startup is to first start `wish' from the Start Menu, under Programs, then select the larger window that comes up (the command window), and cd to the directory where you've stored the ispin tcl/tk source file. Then you can then start it up by typing:
      	source ispin.tcl  # or whatever else you've named this
      
      and you should be up and running.

      The PC installation assumes that you have a command called "cpp.exe" or "gcc.exe" available (which comes with the gnu-c installation). "cpp" is the traditional name of the C preprocessor. Alternatively, ispin can also use the Visual C++ compiler, which is named cl.exe for preprocessing. To complicate your life somewhat, if you have a copy of the Borland C++ compiler installed, you'll notice that this cplusplus compiler was also named cpp.exe -- that's not the cpp you want. To avoid the name clash, you either have to edit the Spin source code to give it the full path name of the 'real' cpp.exe and recompile, or use Spin with the command-line option -Pxxxx where xxxx is the path for cpp.exe. Or better still (the current default) use gcc for both compilation and for preprocessing. Nothing much in Spin will work without access to a preprocessor. You can do a reasonable number of things without a full-blown compiler though (like simulations). The C-compiler (e.g., gcc) is required for all verifications and for the automata views in iSpin.

      If iSpin cannot locate the gcc executable on your system, it will put up a warning message when it first starts up. On recent versions of cygwin gcc is actually a link from /bin/gcc to /bin/gcc-3 or /bin/gcc-4
      Depending on how the name changes, iSpin may not always recognize it. To fix this -- edit the iSpin source (it's tcl/tk text) and define CC as

      	set CC c:/cygwin/bin/gcc-5
      or whatever the new name is.

    2c. Installing Spin on a Mac

      Compile Spin from its sources, as described under 2a for Unix systems in general, while following the suggestions below, which were provided by Dominik Brettnacher, email: [email protected].

      The C preprocessor on Mac OS X cannot be found in /lib. Change the path in the makefile for the proper location (/usr/bin/cpp), and in addition also tell the Mac preprocessor to handle its input as "assembler-with-cpp." This can be done by adding a flag to cpp, for instance in the makefile by adding the directive

        -DCPP="\"gcc -E -x c -xassembler-with-cpp\""
        
      to the definition of CFLAGS. If you prefer clang, you can also try if the following works (not tested):
        -DCPP="\"clang -E -x c\""
        

      Adding iSpin

      On the Mac, iSpin is known to work correctly with Tcl/Tk Aqua, which offers a self-contained binary distribution for the Mac. Use, for instance, "TclTkAquaStandalone", version 8.4.4 from

      Some users reported that on a Mac iSpin by default places its temporary files into the root directory. This is nasty if you have admin privileges and probably leads to error messages if you don't. To prevent this, add a "cd" statement to iSpin (no arguments, just cd by itself on a line), as the first command executed. Place it, for instance, directly after the opening comments in the file. This makes iSpin use the home directory for these files.

      TclTk Aqua also provides the possibility to start a script when being run. For instance, to make iSpin start if you launch the TCL interpreter: move the ispin file into the "Wish Shell.app", as follows:

        chmod -R u+w Wish\ Shell.app
        mkdir Wish\ Shell.app/Contents/Resources/Scripts
        mv ispin*.tcl Wish\ Shell.app/Contents/Resources/Scripts/AppMain.tcl
        

    3. Related Software


    Spin HomePage (Page Last Updated: 19 December 2018)