Dear mr Stuart,
I have a client that is running SCO Openserver 5 that I virtualized many moons ago. They use a program called Foxbase+ (for Xenix) for their custom software that has been running well since the 80s.
We (me and the owner of the company) are currently in the process of rewriting their program in Harbour (a opensource xbase/clipper compatible language), but this will still take a very long time.
Back in the day I had great success with ibcs on kernel 2.2, but went the other route with virtualization when the kernel went 3.x and then decided to stay with SCO.
My goal here, that would make our lives a hell of a lot easier, would be to get Foxbase+ working with ibcs-us on Debian 12. So far I have been unsuccessful and keep getting:
/usr/bin/foxplus: Exec format error.
I would be happy to pay you for assistance if you can help getting Foxbase+ to run.
Best regards,
Keith
Under ibcs-us it's all different. In the original ibcs the kernel loaded the SCO binaries and executed them. Now the kernel doesn't know they exist, and it has no idea how to load coff binaries (which is what SCO is). Thus it's returning a Exec format error to the exec() call.
In this new scheme a normal userspace program, ibcs-us is given the program to run as one of it's command line arguments. It loads the coff formated file into memory, intercepts the system calls in userspace and emulates them. See "man ibcs-us". You should follow the INSTALLATION notes at the bottom of that man page before using it.
Example usage is:
You don't have to use sudo, as explained in the INSTALLATION section of the man page.
First of all I have to give a big shout out to Russell for doing work on what he describes as something he hates! It takes real commitment to do that.
Virtualising SCO environments is becoming slightly more difficult with the less end-user friendly vmware owners, and solutions like Proxmox won't run OpenServer 6 and only runs 5.0.6 with a lot of work. So the idea of moving those difficult to recode solutions to a Linux environment is very inviting.
Also, for some users the computer/network security people are really starting to look very hard at OS environments with no support/updates and very out of date utilities such as openSSH.
My use case requires FoxBASE+ for a very old, but much used and stable application. I really don't want to have to rewrite it so when ibcs-us was thrown up in a search result as a possible solution to my problems I thought that I would give it a go.
The objective is to get the one FoxBASE+ application to run on a modern Linux system - everything else will work on modern Linux.
The thing about FoxBASE+ is that it is all actually Xenix a.out format 386 code - however, 5 hours work and it is all working just perfectly. The binary distribution of ibcs-us won't work due to a few subtle/not-so-subtle problems that can be fixed. Also there are some FoxBASE+ things that you need to fix. I will document these all here.
Russell may want to incorporate these changes/fixes into the original source, or they can be left here for people to find and patch themselves..... I have to admit that I have not regression tested these changes with any other SCO applications, however, I think that the changes only affect the Xenix a.out applications and they were broken anyway.
Due to the fact that this process is by nature complex I am not providing a step-by-step solution, all the points are here but you need to do the detail yourself. As noted in the documentation you may need to pay attention to any files/environment required by FoxBASE+ or your application. I think that I have captured these - however, the use of the trace facility of ibcs-us will help if you think that something strange is happening.
You need to download the latest source so that you can make changes. You will need to also load all the required development modules: make, build-essential, libcap-dev, libc6-dev-i386, linux-libc-dev:i386 Note: you need to activate the i386 architecture: dpkg --add-architecture i386; apt update
Make the following source changes:
binfmt-xout/binfmt-xout.c:
Use
to remove the definition of xout_create_tables() and also the invocation of the function.
ibcs/linux26-compat.c:
Line 243 remove the '=' sign from the brk vs brk_max test. When the brk is placed at the end of the BSS segment it isn't yet mapped because it is the first unused memory location. (This change just removes a useless warning message).
ibcs/main.c:
Fix the secret sauce so that for XENIX binaries the EAX register holds the initial brk value, not the argc.
Line 649 add after the "argc -= cmdline_options.ibcs_argv - argv;" as follows:
------ At this point you have an ibcs-us that will run the FoxBASE+ programs, so now for the FoxBASE+ stuff.
FoxBASE+ installs into /usr/lib/foxplus on a SCO system. I picked all this up and transferred it into /local/usr/foxplus on the Linux system. Everything related to FoxBASE+ is in this new location. These instructions assume this.
I created /local/usr/foxplus/ibcs as a directory and populated it as follows:
5a. .../ibcs/envfix - a bit of common code to patch the Linux environment and create required SCO stuff with (insert the correct SCO TZ variable that you want):
5b. .../ibcs/etc-default-lang - this is a copy of your /etc/default/lang from the SCO environment
5c. .../ibcs/ibcsmap - this is the file mappings that ibcs-us will need and looks something like this:
5d. .../ibcs/ibcs-us - your executable ibcs-us file from the build above
5e. .../ibcs/lang-C-C-C - a directory with the contents of /usr/lib/lang/C/C/C from the SCO environment
5f. .../ibcs/fox(bind,cscrn,pcomp,pfix,plus) - these are copies of the shell scrips from the SCO environment modified for the Linix/ibcs-us environment. Most are simple and look like this modified fixpcomp script:
5g. The .../ibcs/foxplus script requires more extensive modification. The no87 program is a 286 binary - there is no point to it anyway because everyone has a FPU these days. Also much of the standard shell script is pointless, so this is what I have:
At this point you should have FoxBASE+ available on your Linux system. You should be able to run foxpcomp, foxplus etc as per normal. I have only done some go/no-go testing, however, it looks really good. YMMV
Don't forget that if you have a problem with the terminal capabilites (or type) that FoxBASE+ has its own termcap file that you need to edit.
Good luck,
Tim
Last edit: Timothy Wooller 2025-05-27