ubb / Unique Business Basic Free report

Compatibility · What runs today

What runs today.And what we build for you.

Everything on this page was measured by running both engines over the same inputs and comparing the bytes — the same program, the same file, the same arithmetic. Then we do it again on your corpus, free, and scope exactly what your migration involves. If you are the person who has to stand behind this decision, this page was written for you.

Don't take our word for it. Compare the bytes.

Both engines. The same files. Side by side.
Our engine and the runtime you license today can hold the same files open at the same time, so equivalence is something you watch happen — not something you are asked to believe.

01 What we've verified

We run both engines. Then we compare the bytes.

Our verification harness feeds both engines the same inputs and byte-compares what comes back: expression cases, an I/O battery, headless program probes, and a parse of the entire program corpus. Not sampled, not extrapolated, and not rounded in our favor.

7/7

Benchmark programs, byte-identical

All seven benchmark programs, run twice independently. Our engine and the engine it replaces emitted the same bytes both times, with zero mismatches.

2,200+

Automated tests

Run on every build. Nearly half of our source is test code.

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.

2.5×

Sequential read, same files

289,019 records a second against 114,155 on the runtime you license today. Measured on the engine we have since replaced, so it understates where we are now.

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 over 1,344,450 records.

5

Third-party dependencies

libc, num-bigint, num-integer, num-traits, and one build-time helper. That is the entire supply chain your security review has to read.

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.

We measured the runtime. We did not read its manual.

Every behavior our engine reproduces was established by observing what the runtime you license today actually does — down to its on-disk record-locking protocol. That is why both engines can hold the same files open at once without corrupting each other's work, and it is what makes a real parallel run possible instead of a demo.

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. Unique Photo runs its own distribution business on this engine, which means the first phone call about a wrong number comes from our warehouse, not from yours.

Then you point the same harness at us

Run both engines side by side against the same data and compare them yourself, for as long as you like, while production carries on untouched. You do not have to take our word for any of this and you do not have to cut over on faith. See how the parallel run works.

  • 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 summarizes 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.

Whatever your shop does that nobody else does. That is the part we build.

Forty years of a business writing its own software means forty years of things no product anticipated. Custom print paths, an integration somebody wrote in 1998, a report the whole company runs on. None of that is an exception here — it is the work.

03 Built to your corpus

Custom is not an upsell here. It is the method.

We do not hand you a product and a list of remediation items. Your assessment reads your actual programs and your actual files, and what it finds is what we build against — by the engineers who wrote the engine, not by a partner network.

Printing and output, your way

Every shop's print story is its own — forms, spoolers, pre-printed stock, the label printer in the back. We engineer output against what you actually run, rather than inheriting forty-year-old constraints and calling that compatibility.

Reporting built against your data

Native SQL over your own keyed files, key-index aware, so a lookup stays a lookup at 2 ms. The query shapes your business depends on come out of your assessment and get built into your migration.

Third-party and legacy code

Integrations written decades ago by people who have long since left. The assessment inventories every one of them and tells you exactly what each needs — before you have committed to anything.

Every terminal, everywhere

Your people sign on over SSH exactly as they do today, or in a browser with nothing to install — branch counter, warehouse, home. Same screens, same F-keys, same muscle memory, and neither method is a price lever.

The free compatibility report is the front door to all of it: upload your source, and it comes back with your corpus inventoried program by program. The assessment inventories what you have and we build against what it finds — that is the method here, not an exception to it. Nothing about your migration is guessed at, nothing is quoted before it is scoped, and none of it is settled by argument. Both engines run and the bytes decide.

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 reads an entire production ERP corpus without an exception, and hand back exactly which of your programs run, which need attention and why, and what your migration actually involves — including the custom work your shop needs, scoped and priced before you commit to anything. 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 summarized — every third-party and legacy integration inventoried, with what each one needs. Then a plain-language description of what your migration actually involves, scoped before you have committed to anything.

  • Runs today
  • Needs attention
  • Integrations named
  • Migration shape

Start here · Free, and yours to keep

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. At minimum you learn something concrete about a system nobody has been able to describe to you in years — program by program, in your own source.

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.