Vov's Obsessive Von-neumann


vov is a tool that emulates the behavior of a Von-neumann machine. It is basically an interpreter, which reads files in the form of memory assignments and executes the encoded instructions. The vov's instructions make you able to perform simple arithmetic data manipulation. It is a very useful tool to see if your programs work and how. You can run a vov program from a file as you would any other shell, Perl, Python or Ruby program.

vov is free software covered by the GNU General Public License V2 or later.



Files placed in the vov archives are automatically GnuPG-signed. This signature can be used to prove that a file, which may have been obtained from a mirror site or other location, really originated at the vov archive. Current vov archive GnuPG key can be downloaded from my page on Gna!. Please note that this signature does not guarantee that the Gna! Project master site itself has not been compromised. After you downloaded my key, using GnuPG you can import my key typing:

you@localhost$ gpg --import davide-key.gpg [enter]

To verify a signature, using GnuPG, issue the following command:

you@localhost$ gpg --verify foo.bar.asc [enter]

Unless you have taken explicit steps to build a trust path to the vov archive verification key, you should expect to see a warning message after GnuPG has verified the signature. You should not be alarmed by this warning.



The latest published vov version is 2.0.0; all available packages can be downloaded from the vov archive kinda hosted by Gna!. Older versions of vov are still available.

Sources Package

The latest vov sources tarball should compile (and run) on any platform (it is nearly entire standard C - iso9899:1999) using any version of the GNU Compiler Collection; by the way you can find a list of confirmed platforms in the manual page. If you get it working on other platforms, please drop me a mail.

Please note that you can compile vov using any version of flex but if you want to modify and/or just regenerate the scanner then you need to use the version 2.5.4a compiled as shown by this SlackBuild. For more information about this topic, please read the vov's documentation.

Generic GNU/Linux Binary Installer

The GNU/Linux binary is compiled and statically linked against dietlibc and then compressed using upx linked against UCL compression library. You don't need any external library to run this executable. If you can't compile vov yourself on your GNU/Linux box this is the package for you.

The linux installer is created using makeself a small shell script that generates a self-extractable tar.gz archive, covered by the GNU General Public License (GPL) version 2 and above. You can choose the directory where to extract the archive using --target. If no target is specified a directory named vov-2.0.0 will be created in your current working directory. Since the archive follow the Linux Standard Base Specifications for file system hierarchy (FHS) you can even do a system wide installation typing the command:

you@localhost$ ./vov-2.0.0-i486-pc-linux-gnu.run --target /usr [enter]

All files will go in the right place: the interpreter will be under /usr/bin, man page under /usr/share/man and various documentation under /usr/share/doc. You can do something similar installing vov in your home directory setting the environment variables PATH and MANPATH.

Win32 Binary Installer

The Win32 binary is cross-compiled and statically linked using MinGW and then compressed using upx linked against UCL compression library. You don't need any external library to run this executable. If you can't compile vov yourself on your Windows(TM) box this is the package for you. This package should run on any 32-bit version of Windows(TM).

The Windows(TM) installer is a standard Windows(TM) installer therefore you shouldn't have problem using it (simply keep clicking :-P); it is created using NSIS (Nullsoft Scriptable Install System), a professional open source system to create Windows installers.

DOS Binary Package

The DOS binary is cross-compiled and statically linked using DJGPP and then compressed using upx linked against UCL compression library. You don't need any external library to run this executable. If you can't compile vov yourself on your *DOS box this is the package for you. This package should run on any 386 (or better) CPU.

If you get an error like "Load error: no DPMI - Get csdpmi*b.zip" on MS-DOS when trying to run vov (it should not happens using FreeDOS) then you need a DPMI server. A free DPMI server written for DJGPP can be obtained from Charles W Sandmann website. Download the latest DOS binary package and the latest CWSDPMI binary distribution (you only need CWSDPMI.EXE in the BIN/ directory). Assuming you copied all relevant files on a floppy, to unzip vov's archive type:

C:\> pkunzip -d A:\VOV-20~1.ZIP [enter]

After you need to find a directory in your PATH; you can try

C:\> type C:\AUTOEXEC.BAT | find /I "PATH" [enter]

and copy the DPMI server in a directory within your PATH (assuming C:\DOS):

C:\> copy A:\CWSDPMI.EXE C:\DOS [enter]

and you are set. To test if all is working fine, type:

C:\> VOV-2_0\BIN\VOV -V [enter]

and you should now see the vov's banner instead of previous error.

Slackware Binary Packages

I have a slackware repository on line. Since it is a standard Slackware repository you can use it with some sort of auto-magic tool like SWareT. There is a list of supported Slackware versions:

For instance, if you are using SWareT with GPG signature check enabled, then you need to authenticate the repository before doing anything else; you can import my gpg key using the following command:

root@localhost# wget -qO- --no-check-certificate 'https://gna.org/people/viewgpg.php?user_id=2687' | gpg --import [enter]

To add repository data to your swaret.conf file simply issue this command:

root@localhost# ( . /etc/swaret.conf &>/dev/null && echo "REPOS_ROOT=vov_repository%http://download.gna.org/vov/pub/slackware-${VERSION}" >> /etc/swaret.conf ) [enter]

then update your local cache:

root@localhost# swaret --update [enter]

and you are set. From now on, doing --search you should be able to find vov (try --show for more information). When you are ready you can try to --install it.

Please note that vov's Slackware binary packages are compiled on default installations; since a Slackware flex package don't contains any shared library (it only provides an ar archive) you don't need to have a flex package installed on your system to run vov.

There is a SlackBuild script on the source tree if you want to package vov yourself; in that case you need to install a flex package first.

Ubuntu Packages

I have an ubuntu repository on line. There is a list of supported Ubuntu versions:

To authenticate the repository you need to import my gpg key using the following command:

you@localhost$ wget -qO- --no-check-certificate 'https://gna.org/people/viewgpg.php?user_id=2687' | sudo apt-key add - [enter]

To add repository data to your sources.list file simply issue this command:

you@localhost$ sudo wget -O/etc/apt/sources.list.d/vov.list "http://home.gna.org/vov/sources.list.d/$(lsb_release -sc).list" [enter]

then update your local cache:

you@localhost$ sudo aptitude update [enter]

and you are set. From now on you can use your favorite tool (for instance synaptic) to install vov.

Gentoo EBuild

vov was inserted in portage, thanks to Michele Noberasco. If you are a gentoo user you can emerge vov directly.

Other Binary Packages

If you want to package vov for your distribution you are welcome but I will not sign your package and/or host it here. You can send me the needed file(s) to generate the package (i.e. spec file) to include it on the source tree and/or send me the link where to point users looking for the package.



You can get vov via Subversion; the repository can be checked out through anonymous access over the SVN protocol (TCP 3690) or over HTTP. Depending on your network configuration you may prefer to use one or the other (for instance, if your internet access goes through a web proxy, it's unlikely that access over HTTP will work). Issue the following command to get the latest sources over SVN protocol (TCP 3690):

you@localhost$ svn co svn://svn.gna.org/svn/vov/trunk vov [enter]

If you want to get the latest sources over HTTP, use:

you@localhost$ svn co http://svn.gna.org/svn/vov/trunk vov [enter]

A directory named vov will be created in the current directory. You can later update your sources by typing

you@localhost$ svn up [enter]

from within that directory. The Subversion tree doesn't include automatically generated files therefore you can't ./configure as it is but you need GNU shtool, Autoconf, GNU Automake to be installed. If they are, required files are automatically generated by ./autogen.

Take a look to the vov CIA page; this web page has some statistics, and it shows recent progress. This web page is accompanied by an RSS Feed so you can track development as it happens. Thus vov's commits show up in a central IRC channel, #commits on FreeNode.

You can also Browse the SVN repository of vov with your web browser. This gives you a good picture of the current status of the source files. You may also view the complete histories of any file in the repository as well as differences among two versions. There is also a Source Code Daily Snapshot that you can download.



This section describes how to compile vov on a generic GNU/Linux system. First off, vov depends on the Flex Library a tool for generating scanners. You need this installed before attempting to compile vov. After you have downloaded the latest vov sources tarball, unpack it into a directory using

you@localhost$ tar xzf /path/to/vov-2.0.0.tar.gz [enter]

and change into the source directory with

you@localhost$ cd vov-2.0.0 [enter]

vov uses GNU autotools for configuration and Makefile creation. In order to install the package, you must complete three steps: configuration, building and installing.


To configure vov, there is a shell script named configure in the top source directory. It is a standard GNU autoconf configure script, and so accepts the standard GNU configuration options (such as --prefix) To run it type

you@localhost$ ./configure [enter]

and add any options. The non-standard options that the script recognizes are described below. Running the script with the --help option will also provide a quick summary of the recognized options.

--enable-ansi[=STD]: compile against the standard ISO STD (default c99)

--disable-warnings: turn off all compiler warning flags (default: no)

--enable-gprof: creates a binary with profiling information usable with GNU gprof (default: no)

--enable-debug: turn on debugging code (default: no)

--enable-frame-pointer: enable callframe generation for debugging (default: no)

--with-psize: set the memory page size; it must be numeric and a power of two between 512 (OpenVMS VAX) and 16384 (Intel Itanium - IA64) bytes. If you know a working system with a memory page not in this range, please drop me a mail. This value is system dependent: touch it only if you know what you are doing. The default value should be right on almost all cases (default: 4096)


To build vov, simply type

you@localhost$ make [enter]

in the top source directory. This will build the executable that is compatible with the resources found by the configure script.


To install vov, type

root@localhost# make install [enter]

in the top source directory. By default the package installation prefix is /usr/local but the --prefix option to the configure script will change this. The vov executable that was built is installed in ${prefix}/bin but the --bindir option to the configure script can change this. The manual is installed under ${prefix}/share/man (section 1) but the --mandir option to the configure script can change this. vov's documentation (man page in some other formats, license file, example scripts and so on) is installed under ${prefix}/share/vov-2.0.0 but the --datadir option to the configure script can change this. With make install, the package is installed with all symbols in the object files. To save space, you can type

root@localhost# strip -R .note -R .comment -R .note.GNU-stack $(which vov) [enter]

to remove all symbol and relocation information from the executable.


Mailing Lists

There is public vov user support mailing list. Due to spam problems you can only post to this list after subscribing. Unless explicitly stated otherwise the list is english-only.

Before posting please learn and follow netiquette as well as general rules about writing and quoting just as on usenet. For a complete refresher please read HOWTO Edit Messages or How do I quote correctly in Usenet?. As a guideline, remember that HTML mail, top-posting and thread hijacking (posting unrelated messages as replies to existing threads) are forbidden. Playing by the rules makes the life of those who read your mails a lot easier and significantly increases your chances of getting an answer.

vov-users: this is the place to ask about compilation problems, usage questions and similar things. Bug reports about vov should be posted on the appropriate section of the project page.

This page is copyright 2006-2015 Davide Scola. It is valid HTML 4.01 and CSS 2.0. Kinda hosted by Gna!. Last modified: Sun, 29 Nov 2009 20:41:57 +0100