PREDECESSOR · 13.1Stable is 13.2. This page stays because it still owns historical or unchanged contracts.CURRENT 13.2 →
RELEASE LINE13.2 HISTORICAL13.1 PREDECESSOR13.0 PREVIOUS12.4 NATIVE MIRARCHIVE

LOCAL RELEASE CANDIDATE

PAGE ROLE · PORTABILITY

STRICT PORTABILITY IS A CHECK, NOT A VIBE.

The 13.1 source asks one canonical project to survive every admitted profile/layout pair without changing its public interface. It rejects operations whose meaning depends on target width, address representation, C ABI or host capability.

00 command

dbytec check-portable path\to\project

The validator declares PORTABLE_PROFILE_COUNT = 10: hosted i686/x86_64, VM i686/x86_64, i686 freestanding/user, x86_64 freestanding/user, x86_64 Linux and x86_64 Windows.

10 first strict type set

Fixed-width integers, explicit f32/f64, bool, named types and arrays built from admitted types can participate. Other DBYTE types are not “bad”; strict mode simply refuses to pretend an address-sized or target-ABI value has one representation everywhere.

20 intentionally refused

DiagnosticReason
E_PORTABLE_TARGET_WIDTHusize changes with target width.
E_PORTABLE_LEGACY_INTLegacy int is outside the first strict contract.
E_PORTABLE_LEGACY_FLOATLegacy float/literals do not use the explicit fixed representation.
E_PORTABLE_ADDRESS_REPRESENTATIONPointers, borrows, slices, StringView and null carry address meaning.
E_PORTABLE_C_ABIextern "C" and repr(C) are target ABI contracts.
E_PORTABLE_TARGET_CAPABILITYTarget/host namespaces are not target-neutral.
E_PORTABLE_INDEX_SEMANTICSIndexing stays out until every admitted backend enforces one bounds contract.

30 interface drift

Each successful profile analysis contributes the canonical semantic interface fingerprint. More than one fingerprint produces E_PORTABLE_INTERFACE_DRIFT. “Same source” is therefore checked at the public interface instead of inferred from two lucky executions.

40 example

portable_runtime_parity.dby uses fixed-width integers and a deterministic 42 return contract. The parity verifier drives that same source through the execution matrix.

portable_runtime_parity.dbyDOWNLOADOPEN RAW
fn mix(value: u32) -> u32:
    let x: u32 = value * (3 as u32)
    x = x + (7 as u32)
    if x > (100 as u32):
        x = x - (11 as u32)
    return x

pub fn main() -> i32:
    let left: u32 = mix(40 as u32)
    let right: u32 = mix(10 as u32)
    let total: u32 = left + right
    if total == (153 as u32):
        return 42 as i32
    return 1 as i32

let status: i32 = main()
if status != (42 as i32):
    let crash: i32 = (1 as i32) / (0 as i32)
DBY · 452 BSHA-256 616ddae9d7b63dc00f6aa0e123c0a8cca97d9765d22e06a2559fcf6d6f23f4b2