Est. 2005 Intermediate

Vulcan.NET

The xBase compiler that carried Clipper and Visual Objects syntax onto the .NET CLR - built by GrafX Software in Florida, sold on a subscription for a decade, and abandoned in 2017 after its own development team walked out and rebuilt it as the open-source X#

Created by GrafX Software Development, later GrafX Database Systems Inc. (Brian Feldman, product owner; Don Caton, first compiler developer)

Paradigm Object-Oriented, Procedural (xBase)
Typing Static and strong, with an optional dynamic USUAL type for Clipper compatibility
First Appeared 2005 (subscriber preview); 2007 (general release)
Latest Version Vulcan.NET 4.0 (9 September 2015); build 4.00.01e still offered in early 2018

Vulcan.NET was a commercial compiler that took the xBase language as Clipper and Visual Objects had left it - ? for output, USUAL for “whatever type this turns out to be”, DBFCDX for storage - and made it emit Microsoft .NET assemblies. It was sold by GrafX Software of West Palm Beach, Florida, from 2005 to 2017, first as a subscription perk and then as a boxed product. Its purpose was narrow and explicit: give the installed base of Visual Objects business applications a route onto the CLR without a rewrite. It is dormant now, but it did not simply fade. Its own development team left, rebuilt the compiler as open source, and the two sides have published contradictory accounts of why.

The problem it was built to solve

The xBase family runs backwards from dBase III through Clipper - Nantucket’s compiler for the dBase language - to Computer Associates’ Visual Objects, which CA arrived at by buying Nantucket outright and finishing Project Aspen, the Windows successor to Clipper. Visual Objects was a 32-bit, object-oriented, strongly typed evolution of Clipper with its own repository-based IDE, and by the early 2000s CA had lost interest in it and put it in maintenance mode.

GrafX Software - by the X# team’s later account the largest Clipper and Visual Objects reseller in the world - took over development and sales in 2002, under what was reported as an April 2002 licensing, marketing and development agreement rather than a purchase: the copyrights stayed with CA. That left its customers - shops with a decade or two of working business code in VO - facing a platform with no future while the rest of the Windows world moved to .NET. The owner of GrafX, Brian Feldman, started a second product to answer that: a compiler that spoke Visual Objects and produced managed code. Don Caton wrote the first version; over the years Paul Piko, Robert van der Hulst, Chris Pyrgas, Nikos Kokkalis and Fabrice Foray joined the team.

The September 2005 product site put the pitch plainly:

For the last twenty years, businesses have relied on custom software solutions written in high level languages like Clipper, FoxPro, xBase++ and Visual Objects. These custom applications have been the backbone of many businesses who are now faced with moving to the world of Microsoft.NET.

What shipped, and when

The chronology matters because the product’s reputation was shaped by it. Vulcan.NET appeared on the GrafX homepage between 8 and 13 June 2005, already “available through a Platinum Subscription VOPS” and “targeted to ship by the end of 2005”. By June 2006 the same page had moved the target to “spring/summer 2006”; in the newsgroup that month Feldman said shipping would happen “about the time of the German Conference in November of 2006”. A pre-release finally arrived on 31 July 2007 and version 1.0 in November/December 2007 - roughly two and a half years of selling a subscription against a product that had not shipped.

The VO Platinum Subscription was the mechanism that made this possible. A subscriber got regular drops of both Visual Objects 2.8 and Vulcan.NET as they were built, plus support through the GrafX news server; Feldman put the subscriber count at over 250 in mid-2006. It funded development, and it also meant the people paying for the compiler were watching every build.

VersionDateNotes
Subscriber previewmid-2005VOPS members only; no public release
Pre-release31 July 2007First build outside the subscription
1.0November/December 2007Visual Studio 2005 integration, Transporter
1.1.152.0 / 1.1.153.022 July / 9 September 2008/vo compatibility switches, redistributable runtime
2.014 July 2010 (VOPS), 23 August 2010 (public)
3.013 August 2013A later, undated 3.03 added Visual Studio 2010/2012/2013
4.09 September 2015Visual Studio 2012/2013/2015, WPF

Version 1.0 landed badly with the subscribers who had waited for it. Erik Visser, a VOPS member, posted a detailed complaint to comp.lang.clipper.visual-objects on 13 November 2007: no IntelliSense, no refactoring, no databinding, no way to edit a transported Visual Objects form anywhere but back in Visual Objects, no interface inheritance, and none of the third-party libraries - Report Pro, bBrowser, VO2ADO - that any real VO application depended on. Most of those gaps closed over the following years; the third-party ones closed because third parties closed them, bBrowser.NET arriving in September 2008.

The language

Vulcan.NET is Visual Objects syntax on the CLR. The vendor’s own statement of scope was that “to the extent that is both possible and practical, Vulcan.NET is syntactically and semantically compatible with Visual Objects version 2.8”, and that unless stated otherwise a programmer should assume any given language element behaves the same in both.

The entry point looks like nothing else on .NET:

FUNCTION Start AS VOID
   ? "Hello World"
   RETURN

? is the Clipper output operator, AS VOID is the VO type-declaration syntax, and Start is the VO convention for a program’s entry point. The runtime library carried the whole Clipper function vocabulary across intact:

LOCAL nNumber AS FLOAT

// Picture-clause formatting, straight from Clipper
? Transform( 123.45, "@B 99999.99" )
? Transform( -123.45, "@X 99999.99" )

// Date and time helpers
? ElapTime( "03:02:01", "09:09:09" )    // 06:07:08
? Today(), DToS( Today() ), CDoW( Today() )

// Fixed-width string conversion
nNumber := 123.45
? Str( nNumber * 10, 7, 2 )             // 1234.50

// Insert, replace and delete in one function
? Stuff( "ABCDEF", 2, 0, "xyz" )        // AxyzBCDEF
? Stuff( "ABCDEF", 2, 3, "xyz" )        // AxyzEF

Alongside that sits a genuine .NET type system. The vendor described the compiler as “fully CLS compliant”, supporting method and operator overloading, strongly typed arrays, reference and value types, enumeration types and low-level pointer operations. Code could be written in the strongly typed style or fall back on the USUAL dynamic type that Clipper programmers expected. The compiler itself was, per the vendor, “all new and built from the ground up in Microsoft C++”.

The compatibility switches

The most revealing part of the design is a numbered family of compiler options - the 2008 release notes mention /vo2, /vo8 and /vo7 through /vo12 - each one re-enabling a specific Visual Objects behaviour that is wrong by any modern standard. The notes describe them with unusual candour. /vo9 allows missing return statements. /vo10 restores VO’s handling of IIF() when the true and false expressions have different types. /vo11 supports what the notes call “VO’s pathological behavior with arithmetic conversions”, pointing readers at the help topic “for the gruesome details”. /vo12 reproduces Clipper-compatible integer division. /vo7 re-permits the @ operator as a way of passing by reference.

The advice attached to each is the same: if your code came through the Transporter, turn the switch on to avoid subtle runtime incompatibilities; if you are writing new code, do not. From 1.1.152 #pragma options let /vo7 and /vo12 be set around a block of code, so a file could be migrated incrementally. This is what a migration compiler actually looks like - not a clean language, but a dial marked “how much of 1993 do you still need”.

Data and deployment

VulcanDB was a class library for .DBF and .CDX files - the storage format of Clipper, FoxPro and Visual Objects - written as 100% managed code, with a DBFNTX driver for the older Clipper index format as well. The vendor’s stated reason for the pure-managed implementation was that it could then run on devices using the .NET Compact Framework. GrafX also published a screenshot page showing a console and a GUI application running under Mono, with the claim “Vulcan.NET can be run on Linux with Mono”. Both of those are vendor claims and neither was backed by a supported-platform statement; Windows and the Microsoft .NET Framework are the only targets documented in any depth.

From 1.1.152 onward the runtime shipped as VulcanRedist.msi, installing the Vulcan assemblies, the VO-compatible class libraries and the C++ runtime into the GAC. That runtime is the object at the centre of the dispute that ended the product.

How it ended

By 2015 the development team had lost confidence in the way the products were being run. The X# account is that Robert van der Hulst had already left, that Nikos Kokkalis, Fabrice Foray and Chris Pyrgas were about to, and that they approached Feldman to buy what was left of Vulcan and offered him a share of revenue - and that the deal collapsed shortly after they asked for proof of source ownership and of the sales figures. Microsoft had open-sourced the C# and VB.NET compilers as Project Roslyn, and the four built a new xBase compiler on top of it. Their motto, as Wolfgang Riedmann’s history of the project puts it, was “we did it before, we can do it again”. The earliest public X# commit is dated 31 December 2015.

X# quickly passed Vulcan.NET. It understood Vulcan syntax, so existing code moved across, and it added generics, LINQ and AnyCPU builds, none of which Vulcan ever supported - and, by the new team’s account, it ended up more Visual Objects compatible than Vulcan had been. It could also be pointed at the Vulcan runtime assemblies for compatibility, which is where the trouble started: X# told its customers they could use their licensed Vulcan runtime with the new compiler.

GrafX Database Systems closed on 31 December 2017. The notice left on the site read, spelling and all:

Sadly, After 20 years, due to the theft of our intellectual property and it’s associated runtime), by an X-contractor, In the Netherlands, we have closed our Business “GrafX Database Systems Inc”.

The X# team answered on 24 March 2018, calling the accusation “a blatant lie”, arguing that using licensed Vulcan assemblies from another .NET language was something the Vulcan documentation itself described how to do, and noting that they had offered again, after the closure, to buy runtime source code and had not received a reply. Both accounts are public and they cannot both be right; this page records what each side published rather than adjudicating between them.

The practical consequence for users was that the only company selling Visual Objects, Vulcan.NET and the ReportPro report writer had vanished. X# picked up ReportPro sales and support for the community.

Why it matters

Vulcan.NET is a clean case study in the economics of a migration compiler. The market was defined and finite - every business still running a Visual Objects application - and it could only shrink. There was no path to new users, because nobody in 2010 was going to choose xBase syntax for a greenfield project. GrafX funded the work by selling subscriptions to a product that did not exist yet, which worked for a while and corroded trust when the ship date moved three times.

The compiler itself was better than its commercial fate suggests. The /vo compatibility switches are an honest engineering answer to a genuinely hard problem: how do you compile a language whose semantics include a decade of accidents, onto a runtime that has opinions? The answer - make every accident an opt-in flag, scoped by #pragma, documented as a thing to remove - is the same answer later reached independently by projects migrating other legacy dialects.

Its most durable contribution is X#. The compiler that replaced it is open source, built on Roslyn, still under active development in 2026 - X# 3 reached general availability in June 2026 - and supports the VO, Vulcan, Visual FoxPro, Xbase++ and Harbour dialects from a single codebase. The xBase code that Vulcan.NET was built to rescue is still running - just not on Vulcan.NET.

Timeline

2002
GrafX Software - described by the later X# team as the largest Clipper and Visual Objects reseller in the world - takes over development and sales of CA Visual Objects from Computer Associates under a licensing agreement reported in April 2002; the copyrights stay with CA
2005
Vulcan.NET appears on the GrafX homepage between 8 and 13 June, described as a .NET xBase compiler already available to VO Platinum Subscription (VOPS) members and targeted to ship by the end of the year
2005
The dedicated vulcandotnet.com site goes live by 24 September, describing the compiler, the VulcanDB managed DBF/CDX engine, and a choice of Visual Studio 2005 or the Vulcan.NET-written VulcanIDE
2006
July VOPS drop puts the compiler and the Visual Studio integration package in subscribers' hands; Brian Feldman tells the newsgroup that Vulcan.NET will ship around the German Visual Objects conference in November 2006
2007
Pre-release version published on 31 July, followed by Vulcan.NET 1.0 in November/December, integrated into Visual Studio 2005 and shipping with the Transporter tool for converting Visual Objects projects
2008
Maintenance builds 1.1.152.0 (22 July) and 1.1.153.0 (9 September) add the /vo9, /vo10 and /vo11 compatibility switches, rename /id to /vo12, introduce #pragma options and ship the VulcanRedist.msi runtime installer; VOTools announces bBrowser.NET (Vulcan Edition) on 4 September
2010
Vulcan.NET 2.0 released to VOPS members on 14 July and to the general public on 23 August
2013
Vulcan.NET 3.0 released on 13 August; a later 3.03 update extends Visual Studio support to 2010, 2012 and 2013, though the announcement of it carries no year
2015
Vulcan.NET 4.0 released on 9 September with Visual Studio 2012/2013/2015 integration and WPF support; in the same year most of the remaining development team decides to leave GrafX
2015
The departing developers begin X#, an open-source xBase compiler built on Microsoft's newly released Roslyn sources; the earliest public commit is dated 31 December 2015
2017
GrafX Database Systems Inc. closes on 31 December, ending commercial sales of Vulcan.NET and of Visual Objects; the final advertised build is 4.00.01e
2018
GrafX posts a closure notice accusing a former contractor of intellectual-property theft; the X# team publishes a point-by-point rebuttal on 24 March and takes over ReportPro support for the stranded community

Notable Uses & Legacy

ServiceGO! Srl (Florence, Italy)

Rewrote Wingicat, its electronics repair and service-centre management system, from Visual Objects 2.5 into Vulcan.NET, moving the data layer from DBF/CDX to MySQL; also built PhotoDB, a photo cataloguing application, in Vulcan.NET

Softway (Greece)

Shipped two maritime business applications written in Vulcan.NET - Voyage Estimation, for building and maintaining voyage calculations, and Stores and Provisions, which tracks a ship's supply enquiry from vessel to delivery

VOTools / bBrowser

The German vendor of bBrowser, the best-known data-aware grid control in the Visual Objects world, released bBrowser.NET (Vulcan Edition) in September 2008 and a version 4 Vulcan edition in May 2013

BEST Consultancy (United Kingdom)

Dr. Philip H. Hepburn built an Image Viewer - scanning, screen capture, rotation, scaling and GDI+ colour transforms - as a Vulcan.NET teaching project whose full source was published for other xBase programmers to learn from

GrafX VulcanIDE

GrafX wrote its own alternative development environment in Vulcan.NET itself, offered to Visual Objects users who did not want to move to Visual Studio - the compiler's most visible self-hosted application

Language Influence

Influenced By

Visual Objects Clipper dBase

Influenced

X#

Running Today

Run examples using the official Docker image:

docker pull
Last updated: