Repository navigation
v0.2.10
Module Name: baselibs
Release Tag: v0.2.10
Origin Release Tag: v0.2.9
Release Commit Hash: 174bcba
Release Date: 2026-07-28
Overview
The baselibs module provides a selection of basic C++ utility libraries for common use in the S-CORE project.
Disclaimer
This release is not intended for production use, as it does not include a safety argumentation or a completed safety assessment.
The work products compiled in the safety package are created with care according to the S-CORE process. However, as a non-profit, open-source organization, the project cannot assume any liability for its content.
For details on the features, see https://eclipse-score.github.io/score/main/features/baselibs/index.html
Notable Changes
Upcoming migration: score/memory moving to the communication repository
score/memory (in particular the shared-memory implementation under score/memory/shared) will be relocated into the communication module. This release contains only preparatory work. The actual code move is planned for the next release and will be a breaking change. Prepare to update your Bazel labels, include paths, and namespaces.
Already done in this release to enable the move:
AtomicIndirectormoved fromscore/memory/sharedtoscore/concurrency. A shim remains at//score/memory/shared:atomic_indirector(re-exporting intoscore::memory::shared) so unmigrated code keeps working.
Migration: depend on//score/concurrency:atomic_indirectorand use thescore::concurrencynamespace.string_manipulationmoved fromscore/memorytoscore/string_manipulation(StringLiteral,StringComparisonAdaptor,LazySplitStringView/split_string_view). Shims remain at the old//score/memory:*labels.
Migration: depend on//score/string_manipulationand use thescore::string_manipulationnamespace (the deprecatedStringLiteralstays in the top-levelscorenamespace).
Breaking changes & deprecations
- Static reflection / serialization macros renamed with a
SCORE_prefix. The old macros now emit deprecation warnings and forward to the new names:STRUCT_VISITABLE→SCORE_STRUCT_VISITABLESTRUCT_TRACEABLE→SCORE_STRUCT_TRACEABLEMEMCPY_SERIALIZABLE→SCORE_MEMCPY_SERIALIZABLEMEMCPY_SERIALIZABLE_IF→SCORE_MEMCPY_SERIALIZABLE_IF
result:BlankandResultBlankare deprecated. Usevoidinstead ofscore::result::Blank, andResult<void>instead ofResultBlank.score::Resultis now fully[[nodiscard]]. Ignoring a returnedResultnow produces a warning and can break-Werrorbuilds. Consume/handle the returned value.hash: public API switched fromResultBlanktoResult<void>.IHashAlgorithm::Update/UpdateFromStream(and their mocks/impls) now returnResult<void>. Update your overrides andMOCK_METHODsignatures.analysis/tracing:generic_trace_apinow usesstd::variantinstead ofscore::cpp::variantin its interface, stub, and mock signatures. Adapt call sites accordingly. More breaking changes are planned in the next release.- Rust components moved from
//src/...to//score/.... Theelementarycomponent was renamed toallocator, plus renames on name clashes. Old//src/...labels remain as aliases with deprecation warnings; update to the new//score/...labels. containers_rust: removed&'allocfrom the allocator API (the lifetime was propagating unnecessarily). It is a breaking Rust API change.
New features
- allocator: bounded lock-free allocation using an atomic bump pointer (CAS-based, capped retries for deterministic execution, graceful failure on exhaustion).
score::cpp::span: newsize_bytes()method.- concurrency
LockedPtr: addedconstoverloads and[[nodiscard]]on member accessors. - os: new
sem_timedwait_monotonic()(Linux usessem_clockwait(), requires glibc ≥ 2.30); new QNX I/O and OCB wrappers (io_close_dup_default,io_lock_ocb_default,io_unlock_ocb_default) with mocks. - flatbuffers: buffer version identification and verification, plus Starlark rules that inject major/minor version into FlatBuffer binaries at build time;
VersionReadergained afile_identifiersanity check; added a versioned-config example. - memory/shared: now rejects inter-VM shared-memory paths (the
/intervm-shared-shmem/prefix), returningnullptrand logging an error, since no portable inter-VM implementation exists yet.
Bug fixes
- DateTimeConverter: fixed epoch-time calculation (off-by-one in date calculation, removed incorrect leap-year adjustment, improved conversion accuracy).
- os: glibc < 2.30 warning changed to a
#pragma message. - flatbuffers: mitigation for the transitive
grpc-javadependency. - libacl not compiled with -fPIC causes linker failure on AArch64 PIE target #172
Compatibility
The following platforms are supported using the bazel_cpp_toolchains:
x86_64-unknown-linux-gnuaarch64-unknown-linux-gnux86_64-unknown-nto-qnx800aarch64-unknown-nto-qnx800
Performed Verification
- Build on all supported platforms
- Unit test execution on all supported platforms (some test failures are expected on AArch64 and QNX targets).
- Address and undefined behavior sanitized unit test execution
- Leak sanitized unit test execution
Report: https://github.com/eclipse-score/baselibs/actions/runs/30361163145
Upgrade Instructions
Backward compatibility with the previous release is not guaranteed.
Contact Information
For any questions or support, please contact the Base Libs Feature Team (https://github.com/orgs/eclipse-score/discussions/1223) or raise an issue/discussion.
All changes
- Lift restriction for most of score/os by @4og in #331
- os: Add sem_timedwait_monotonic by @Ivan-Tiurin in #303
- Move docs from baselibs_rust into baselibs by @Priyanka-Patil18 in #285
- flatbuffers: add flatbuffers allocator test by @paulquiring in #211
- aborts_upon_exception: making cc_library publicly visible by @Rutik7 in #335
- os: Change glibc < 2.30 warn to pragma message by @Ivan-Tiurin in #336
- repo: restructure Rust components by @arkjedrz in #334
- Remove OSAL QNX related paths from restricted files list by @4og in #338
- Update dependency score_process to v2.0.1 by @eclipse-score-bot in #339
- concurrency: cover ThreadPool construction with custom name by @ahmed0mousa in #345
- Add vaJson detailed design by @JuriSchroeder in #298
- baselibs: enable contribution to network by @ssingh2099 in #349
- Code sync by @4og in #350
- Enable clang-format enforcement for score/network by @4og with @Copilot in #352
- enable contribution for baselib OS by @rahulthakre29 in #353
- result: deprecate Blank and ResultBlank aliases by @Rutik7 in #351
- lib/memory: Cover false decision of prefer_typed_memory ternary by @4og in #354
- tooling: improve IDE support by @arkjedrz in #332
- flatbuffers: Change mitigation for transitive grpc-java dependency. by @OliverHeilwagen in #355
- Remove score/memory from restricted paths by @4og in #362
- pal: remove
containersdependency by @arkjedrz in #358 - Change patch_args to patch_strip for hedron_compile_commands by @4og in #364
- OS: Add QNX I/O and OCB wrappers by @pushkaraj-gode in #342
- containers_rust: remove &'alloc from allocator use by @arkjedrz in #359
- score/containers: Extend test cases by @crimson11 in #318
- score_log: score_log for sync and allocator by @arkjedrz in #360
- libmem: replace expect death by @KrishaDeshkool in #367
- chore(deps): update dependency score_platform to v0.6.1 by @eclipse-score-bot in #372
- Fix toolchain selection by @LittleHuba in #378
- feat(hash): add requirements and architecture documentation for LibHash by @Chahult in #333
- Update dependency score_platform to v0.6.2 by @eclipse-score-bot in #375
- Refactor Bazel configuration by @4og in #379
- chore(deps): update dependency score_docs_as_code to v4.6.1 by @eclipse-score-bot in #361
- fix: replace deprecated Blank with void in ResultBlank alias by @Rutik7 in #385
- Add baselibs inspection checklist item by @aschemmel-tech in #357
- concurrency/simple_task: rename lambda capture to avoid shadow-uncapt… by @Priyanka-Patil18 in #382
- enable filesystem for contributions by @Rutik7 in #391
- third_party/acl: uplift libacl to 2.3.1-1 for PIC (AArch64 PIE) by @dcalavrezo-qorix in #392
- Adjustments to hash lib by @eclipse-impl in #397
- Add size_bytes() method to span by @mariuswbr in #393
- Migrate atomic indirector and string manipulation by @LittleHuba in #396
- flatbuffers: Add opt-in buffer identification mechanism by @OliverHeilwagen in #174
- Update baselibs component requirements for feature requirement changes by @4og in #387
- Use score_tooling version 1.3.1 by @paulquiring in #399
- Add bounded lock-free allocation using atomic bump pointer by @Rahul-Sutariya in #365
- Further preparation for moving score/memory/shared by @LittleHuba in #400
- Update dependency score_process to v2.0.2 by @eclipse-score-bot in #404
- const overloads & nodiscard for LockedPtr members by @sankurm in #377
- Use
grpc-javadependency instead ofgrpcin the flatbuffers workaround by @4og in #407 - Block memory/shared modifications in preparation of migration by @LittleHuba in #408
- analysis/tracing: Use std::variant instead of score::cpp::variant by @indramaniarorascore in #409
- Add version specifier to all needs in documentation by @4og in #410
- refactor: add SCORE_ prefix to static reflection macros by @rahulthakre29 in #370
- Fix epoch time calculation in DateTimeConverter and update unit tests by @4og in #418
- result library fully nodiscard by @ssingh2099 in #192
- hash: Transition to Result by @Rutik7 in #416
Full Changelog: v0.2.9...v0.2.10