FoxPro
Fox Software's fast dBASE-compatible database language from Perrysburg, Ohio. It grew from FoxBASE (1984) into FoxPro, was bought by Microsoft in 1992, and lived on as Visual FoxPro until 2015.
Created by Dave Fulton and Bill Ferguson (Fox Software); later Microsoft
FoxPro was the database language and development environment that made the Fox Software name, and for a while it was the fastest way to run dBASE-style code on a PC. It started in December 1984 as FoxBASE, a work-alike of Ashton-Tate’s dBASE II written in Perrysburg, Ohio. In 1989 it took the FoxPro name, and in 1991 the Rushmore query optimizer gave it a lasting reputation for speed. Microsoft bought Fox Software in 1992 and released Windows, Macintosh and Unix editions. In 1995 the line was reborn as Visual FoxPro, which Microsoft supported until January 2015. Today FoxPro is a historical product.
History and Origins
FoxBASE: a faster dBASE
In the early 1980s Ashton-Tate’s dBASE II was the dominant database program for microcomputers. Its built-in command language had become a de facto standard for small business applications, and it was slow, so a market grew for compatible “clones.” According to Fox Software’s history, Dave Fulton and Bill Ferguson wrote FoxBASE as a dBASE II work-alike and released it in December 1984, when the company had about six employees. Its selling point was speed.
Fox Software followed the dBASE releases closely:
| Product | Year (per Fulton’s own chronology) | Compatibility target |
|---|---|---|
| FoxBASE | 1984 | dBASE II |
| Multi-User FoxBASE | 1985 | dBASE II, with simple multi-user features (MS-DOS and Unix) |
| FoxBASE+ | 1986 | dBASE III Plus |
| FoxBASE+/Mac | 1987 | dBASE III Plus on the Macintosh |
| FoxPro (1.0) | 1989 | a superset of dBASE IV |
| FoxPro 2.0 | 1991 | added SQL and Rushmore |
Fulton later wrote that FoxBASE+/Mac won most of the Macintosh database market within a few months of its release (his own claim, not independently verified), and called it an initial design study for the FoxPro interface.
The Ashton-Tate lawsuit
On 18 November 1988 Ashton-Tate sued Fox Software and SCO in federal court in Los Angeles (Ashton-Tate Corporation v. Fox Software, Inc. and The Santa Cruz Operation, Inc.). It claimed that the “organization, structure, and sequence” of the FoxBASE line copied its dBASE programs. Fox counterclaimed that Ashton-Tate was monopolizing the microcomputer database market.
On 11 December 1990 Judge Terry Hatter ruled that Ashton-Tate’s dBASE copyrights were invalid. Ashton-Tate had not told the Copyright Office that dBASE derived from JPLDIS, a public-domain program from the Jet Propulsion Laboratory. The ruling was widely reported, but it was not the end of the matter: Hatter rescinded it in April 1991. The case was effectively ended by antitrust regulators. When Borland bought Ashton-Tate, the proposed consent decree that the Justice Department filed on 17 October 1991 barred Borland from claiming copyright in the dBASE command language and required it to dismiss the Fox suit once Fox dropped its counterclaims. The decree’s supporting papers call Fox “the largest of the xBASE firms.”
FoxPro and Rushmore
FoxPro 1.0 for MS-DOS shipped in 1989; its manuals are dated September 1989. It introduced a new windowed text-mode interface modeled on the Macintosh product. According to Fulton, it still used the FoxBASE+ engine internally. FoxPro 2.0 (1991) was the version that made FoxPro’s name. Its Rushmore technology used existing indexes to resolve filter conditions, and it added an SQL SELECT command plus screen and report builders.
Microsoft
On 24 March 1992 Microsoft announced that it would acquire Fox Software for about 1.36 million Microsoft shares, worth roughly $175 million. The Seattle Times reported that Fox then had 275 to 300 employees. Borland already owned dBASE and Paradox, and Microsoft’s own Windows database, code-named Cirrus, had not yet shipped. The merger closed on 29 June 1992 and Fulton joined Microsoft. Cirrus shipped as Microsoft Access later in 1992, and Microsoft kept FoxPro as its xBase product.
FoxPro 2.5 for Windows and MS-DOS shipped in early 1993 (disk files dated January 1993). Code written for one ran on the other with little or no change. Reviewing it in April 1993, the Los Angeles Times credited Rushmore for the program’s “blazing speed”. It also reported that Macintosh and Unix versions were planned. Those editions followed in the 2.5/2.6 generation, and FoxPro 2.6 and 2.6a appeared in 1994. In 1995 the product became Visual FoxPro 3.0, which added classes and inheritance, a database container and client/server features.
Design Philosophy
FoxPro’s design came from a single business idea: run the dBASE language, only faster. Several consequences followed:
- Compatibility first. Each Fox release targeted the current dBASE: II, then III Plus, then IV. Existing dBASE programs and
.DBFfiles could move to FoxPro with little change. FoxPro 2.6 was reportedly still marketed partly on improved dBASE compatibility. - Speed as the selling point. Fox’s reputation rested on performance, from FoxBASE in 1984 to Rushmore in 1991.
- The language is the database. Tables, indexes, work areas and records are built into the language, so no separate database API is needed. Opening a table is a statement (
USE), and moving through records is a loop construct (SCAN ... ENDSCAN). - Interactive and programmatic at once. Commands typed in the Command window are the same commands used in programs. A developer could test a query interactively and paste it into code.
Key Features
xBase commands and work areas
FoxPro keeps the dBASE model of numbered work areas. Each work area holds one open table with its own record pointer, index order and filter, and SET RELATION links work areas so that moving in one table moves the related table too.
* FoxPro 2.x: list unpaid invoices that are past due
SET TALK OFF
USE invoices ORDER TAG duedate
SCAN FOR duedate < DATE() AND NOT paid
? invno, custname, amount
ENDSCAN
Embedded SQL
From FoxPro 2.0, SQL SELECT could be mixed freely with native xBase commands. The result could go to a cursor, a table or an array:
SELECT custname, SUM(amount) AS owed ;
FROM invoices ;
WHERE NOT paid ;
GROUP BY custname ;
ORDER BY 2 DESC ;
INTO CURSOR owing
BROWSE
The semicolon at the end of a line continues a statement onto the next line. * starts a comment line, and && starts an end-of-line comment.
Rushmore query optimization
Rushmore optimizes FOR clauses (on commands such as LOCATE, REPLACE, COUNT, SCAN and BROWSE) and SQL WHERE clauses by matching them against existing index expressions. Microsoft’s later documentation sets out the rule: a condition is optimizable only if its left side exactly matches an index key. With an index on UPPER(cu_name), the condition UPPER(cu_name) = "ACME" is optimized but cu_name = "ACME" is not. Conditions combine by fixed rules: two optimizable expressions joined by AND or OR remain fully optimizable, while an OR with a non-optimizable term defeats optimization. The documentation’s only speed claim is that “certain complex table operations” can run “hundreds or even thousands of times faster” than the same operations without Rushmore. That is the vendor’s statement about best cases on indexed tables, not a benchmark result.
Screens, menus and reports
FoxPro 2.x programs built their user interfaces from @ ... SAY ... GET and READ, with SCATTER/GATHER moving a record into memory variables and back. The 2.x Screen Builder and Report Builder generated this code visually.
SCATTER MEMVAR
@ 2, 2 SAY "Customer:" GET m.custname
@ 3, 2 SAY "Amount: " GET m.amount PICTURE "999,999.99"
READ
GATHER MEMVAR
Dynamic typing and macro substitution
Variables have no declared type, and a variable can hold a value of any type. The & operator expands a string into source text at run time (macro substitution). This makes dynamic queries easy and static analysis hard.
Evolution and Successors
| Generation | Years | What changed |
|---|---|---|
| FoxBASE / FoxBASE+ | 1984–1988 | dBASE II and III Plus work-alikes; Macintosh and Xenix ports |
| FoxPro 1.x | 1989–1990 | dBASE IV superset, windowed text-mode interface |
| FoxPro 2.0 | 1991 | Rushmore, SQL SELECT, screen and report builders |
| FoxPro 2.5 / 2.6 | 1993–1994 | Microsoft releases for Windows, MS-DOS, Macintosh and SCO Unix |
| Visual FoxPro 3.0–9.0 | 1995–2007 | object-oriented language, database container, COM. Windows-only after 3.0 |
Visual FoxPro is the direct successor and has its own encyclopedia entry. Its last version, 9.0, entered support on 22 December 2004. Service Pack 2 followed on 16 October 2007. In March 2007 Microsoft said there would be no Visual FoxPro 10 and promised to release the “Sedna” add-ons as shared source on CodePlex. A petition from FoxPro developers, opened on the MasFoxPro site on 22 March, reportedly had more than 1,400 signatures by 2 April and about 2,950 by 13 April, according to contemporary press reports. Microsoft replied on 3 April that continuing the product would require a 64-bit development environment, which “would involve an almost complete rewrite of the core product.” Mainstream support for Visual FoxPro 9.0 ended in January 2010, and extended support in January 2015.
Current Relevance
FoxPro is no longer sold or supported. The plain FoxPro 2.x versions were out of support long before Visual FoxPro was. Two things keep it from being just a museum piece:
- Legacy code. Microsoft’s own 2007 estimate was that more applications were running in FoxPro 2.6 than in Visual FoxPro. Some of those systems are still in use, so FoxPro skills are still occasionally needed for maintenance and data migration.
- The
.DBFformat. FoxPro tables are still.DBFfiles, readable by many tools and libraries, and that makes old FoxPro data easier to recover than its applications.
No official FoxPro runtime or Docker image exists. FoxPro 2.x for MS-DOS can be run in DOS emulators, but that depends on having an original licensed copy.
Why It Matters
- It proved the clone could beat the original. FoxBASE and FoxPro showed that a small company in Ohio could win on performance against the market-leading dBASE using dBASE’s own language.
- It shaped software-copyright history. The Ashton-Tate suit, the short-lived 1990 ruling and the 1991 consent decree together kept the dBASE command language open for competitors to implement.
- It changed the PC database market. Microsoft’s 1992 purchase of Fox Software, together with Access, made Microsoft a direct rival to Borland, which owned dBASE and Paradox.
- It showed how SQL could fit into a record-oriented language. FoxPro 2.0 let SQL
SELECTand native xBase commands share the same tables, cursors and Rushmore optimizer.
FoxPro’s history ran from FoxBASE in December 1984 to the end of Visual FoxPro support in January 2015, about thirty years.
Timeline
Notable Uses & Legacy
Long-lived FoxPro 2.6 business applications
On 3 April 2007 Microsoft said that 'by some of our internal estimates' there were more applications still running in FoxPro 2.6 than in Visual FoxPro, although 2.6 had been out of support for years. That is Microsoft's own unpublished estimate, but it shows how widely the procedural 2.x code was deployed
Multi-user Xenix and Unix systems
The Santa Cruz Operation (SCO) sold FoxBASE on its Xenix operating system. That deal is why SCO was a co-defendant in Ashton-Tate's 1988 lawsuit, and a FoxPro 2.6 edition for SCO Unix followed later
Consultants and vertical-market developers
With the Distribution Kit, FoxPro programs could be shipped as stand-alone executables. That made it a common tool for independent developers building custom database applications. Compute! (February 1993) argued that the roughly $1,000 for FoxPro plus the Distribution Kit could pay for itself on a developer's first job
Microsoft's entry into PC databases
Microsoft bought Fox Software in 1992 to gain a foothold in the PC database market, where Borland owned both dBASE and Paradox. FoxPro became Microsoft's xBase product alongside Access, which shipped later that year