ubb / Unique Business Basic Free report

Compatibility · What runs today

What runs today.And what doesn't.

Everything on this page is either something we measured against the incumbent runtime or something we haven't finished. There is no third category, and the second list is on the same page as the first — at the same size. If you're the person who gets blamed when this goes wrong, this page was written for you.

A vendor who won't show you the gaps is hiding them.

Why this page exists
You are going to find the limits eventually. Finding them in a sales cycle is cheap. Finding them during a cutover weekend is not.

01 What we've verified

Measured on a real production corpus. Not on a benchmark suite.

Every number here comes from differential testing: the same program, the same file and the same arithmetic executed on both engines and compared. Not sampled, not extrapolated, and not rounded in our favour.

5,079

Programs parsed, 100%

An entire production corpus — the whole directory, not a curated subset. Nothing set aside as "unsupported syntax".

536,000

Lines of Business Basic source

Four decades of accumulated business rules read by the front end without a single exception thrown.

3.63M

Records read byte-exact

3,631,827 records across ten production files, read on both runtimes and compared record for record against the incumbent.

245/245

Arithmetic cases penny-exact

Decimal conformance including PRECISION rounding. Financial software: every case has to match, so every case is a test.

2ms

Keyed lookup on that same file

Native SQL using the file's own key index — against 3,665 ms for the full sequential scan of the identical query.

0%

CPU per idle session

A signed-on user who isn't typing costs nothing. The naive implementation busy-loops, and that is how servers get sized wrong.

The write path is gated, not assumed

Reading is the easy half. Records our engine writes are read back in the incumbent runtime and compared byte for byte — on real multi-level B-tree keyed files with node splits, deletions and free-list reuse, not on a toy fixture. If a written record differs by one byte, the build doesn't ship.

A real distribution ERP runs end to end today

Not a demo program and not a test harness: sign-on, master menu, customer inquiry, item maintenance and reports, on unmodified source against real data files. Our own company's orders go through this engine, which means the first phone call about a wrong number comes from our warehouse, not from yours.

  • SIGN-ON
  • MENU
  • INQUIRY
  • MAINTENANCE
  • REPORTS

That chain, on unmodified source and real data files, is what "runs end to end today" means here. It is also the order we demonstrate it in, because it is the order your own people would go through it.

02 The language surface

Roughly 60 verbs, 50 functions, 30 mnemonics.

Below is a scannable sample of what's implemented, so you can go looking for the specific thing you're worried about. If it isn't listed, that means it isn't in this sample — not that it isn't implemented. The parser answers the question properly in an afternoon.

Verbs

Control flow, program flow, file declaration and file I/O. A sample of the implemented set:

  • LET
  • PRINT
  • INPUT
  • READ
  • WRITE
  • EXTRACT
  • FIND
  • REMOVE
  • OPEN
  • CLOSE
  • ERASE
  • DIM
  • IF
  • THEN
  • ELSE
  • ENDIF
  • FOR
  • NEXT
  • WHILE
  • WEND
  • GOTO
  • GOSUB
  • RETURN
  • ON
  • SWITCH
  • CASE
  • SWEND
  • CALL
  • ENTER
  • EXIT
  • EXITTO
  • ESCAPE
  • SETERR
  • RETRY
  • STOP
  • END
  • RUN
  • PRECISION
  • LOCK
  • UNLOCK
  • BEGIN
  • CLEAR
  • RELEASE
  • WAIT
  • DIRECT
  • INDEXED
  • SERIAL
  • STRING
  • SORT
  • RENAME

Functions

String, numeric, conversion, bitwise, and the file and key introspection functions your utilities lean on:

  • STR()
  • NUM()
  • LEN()
  • POS()
  • FILL()
  • PAD()
  • CVS()
  • DEC()
  • BIN()
  • ATH()
  • HTA()
  • MSK()
  • NOT()
  • AND()
  • OR()
  • XOR()
  • MOD()
  • ABS()
  • INT()
  • SQR()
  • SGN()
  • MIN()
  • MAX()
  • RND()
  • DATE()
  • TCB()
  • FIN()
  • FID()
  • IND()
  • LST()
  • KEY()
  • KEYF()
  • KEYL()
  • KEYN()
  • KEYP()

Terminal mnemonics

Passed through raw by the incumbent, so these are an interface rather than an implementation detail. Cursor addressing, clearing, attributes, color, line draw and windows:

  • '@(c,r)'
  • 'CS'
  • 'CL'
  • 'CE'
  • 'CR'
  • 'LF'
  • 'BR'
  • 'ER'
  • 'BU'
  • 'EU'
  • 'BB'
  • 'EB'
  • 'SB'
  • 'SF'
  • 'LD'
  • 'LE'
  • 'WINDOW'
  • 'POP'
  • 'SCROLL'

The I/O option set

The options that turn a read into control flow. All of them branch and behave the way the incumbent does, including a branch to a line number that doesn't exist rounding up to the next one that does:

  • KEY=
  • DOM=
  • ERR=
  • END=
  • SIZ=
  • TIM=
  • SRT=
  • TBL=

File types: multi-level B-tree keyed files, fixed-record direct files, serial and string files — all opened in place, in their existing format, with their existing keys and their existing alternate key segments.

Alternate keys, descending key segments, segment offsets and padding are handled the way each file's own header describes them, not the way the manual summarises them. A wrong alternate key doesn't crash anything — it quietly finds the wrong record — so this is one of the places we test hardest.

Here's the list of what doesn't work. We'd rather you got it from us.

A vendor who won't show you the gaps is hiding them. This section gets the same space, the same type size and the same plain language as everything above it, because you're going to find these limits eventually and it is much cheaper for both of us if you find them now.

03 What doesn't run yet

The gaps, in the words we use internally.

Five things. Each one is either being rewritten deliberately, genuinely unfinished, or waiting on something we can't supply ourselves. If one of them is load-bearing for you, your assessment finds it before you've signed anything.

Being rewritten

The report writer and print spooling

We are rebuilding this subsystem rather than emulating it. Emulating a forty-year-old spooler faithfully would mean inheriting its constraints permanently, and printing is the one area where customers actively want the behavior to change. It is not finished, and until it is, your printing story needs a conversation rather than a checkbox.

Partial

The SQL layer has no JOINs or aggregates

Today it is single-table SELECT with key-aware access — which is precisely what makes the 2 ms lookup possible, and precisely what it cannot do yet. Joins and aggregate functions are on the roadmap and not in the build. If your reporting depends on them, you keep your current tooling for now and use this for the lookups it's good at.

Needs source

Vendor-encrypted third-party programs

A small number of programs in a typical corpus were shipped encrypted by a third party. We can't run what we can't read, and we won't pretend otherwise. Those need source from whoever wrote them, or they need replacing — and the free report tells you exactly which ones and how many, which is usually a shorter list than people fear.

Landing now

The multi-user daemon

The shared-process architecture — one long-lived runtime with an in-memory shared file cache and lightweight per-user sessions — is being merged as we write this. Today, a session is still a process. It works and it costs 0% CPU while idle, but the density story is not fully in the build yet, and we're not going to quote you a concurrency number we haven't measured.

Pre-GA

We're taking design partners, not self-serve production traffic

You would be deploying pre-GA software, with a mirror of your existing runtime running alongside it for as long as you want one. In exchange you get direct access to the engineers who wrote the engine and a real say in which of the items above closes first. If you need a finished product with a five-year reference list, we are not that yet and we'll tell you so on the first call.

Nothing on this list is buried in an appendix or written in smaller type than the good news. If your corpus leans on one of these, it will be in your report in plain language — and you can walk away having learned something useful about your own system.

04 Find out for certain

Stop guessing at your own compatibility.

The numbers above are ours. The only ones that matter to you are yours — and we'll produce them from your actual source, free, with no call and no salesperson attached to the download.

Free · automated · yours to keep

Send your program directory. Get the real answer back.

We run your corpus through the same parser that produced the 100% figure above and hand back exactly which of your programs run, which need attention and why, and what your migration actually looks like. As far as we know, nobody has ever been able to give you that answer before.

Get your free report

01Tar it up

Programs only. No data.

One archive of your program directory. We do not want your data files, your customer list or your general ledger to answer this question — the parser only reads source. A full corpus is typically only a few megabytes.

02Send it

Email it, or we'll give you an upload.

Small archives go by email. Larger ones get a private upload link. If your counsel wants a mutual NDA in place first, ask for one and we'll sign it — your source is yours, we claim no license to it, and it is deleted on request.

  • Mutual NDA on request
  • Deleted on request
  • No license claimed

03Read the report

What runs, what needs attention, what it takes.

Program by program, with the reasons named rather than summarised — including any encrypted programs we can't read and anything that lands on the gap list above. Then a plain-language description of what your migration actually involves.

  • Runs today
  • Needs attention
  • Needs source
  • Migration shape

Design partners

Find out where you actually stand.

The report is automated, it costs nothing, and you keep it whether or not you ever speak to us again. Worst case, you learn something concrete about a system nobody has been able to describe to you in years.

or read the detail

Platform covers how the engine, the terminal and the SQL layer actually work. Migration covers the parallel run and the cutover weekend. Or email hello@uniquebb.com and one of the people who wrote this will answer you.