Repository navigation
Embedded Linux port, hardware API and a garbage-free backend fast path - #6112
Conversation
The embedded variant of the native Linux port (DRM/KMS, fbdev or memory display, evdev input, a software rasterizer, no GTK), a core hardware API (GPIO, I2C, SPI, serial, PWM, CAN, watchdog, backlight) for the Linux port, the backend and the simulator, board profiles and a deploy-to-device goal for Maven and Gradle, and Yocto, Buildroot and Raspberry Pi OS recipes. The backend answers a JSON request without allocating anything beyond the handler's own result: the Host header is reused per connection and each generated route encodes through one static Json.Encoder. CI: embedded-linux.yml builds and runs the demo on an arm64 runner and checks its frame, speed and memory; backend-performance.yml runs the headless comparison against Rust and Go, counts per-request allocation exactly and fails when the developer guide's numbers slip. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 12 screenshots: 12 matched. |
… guide snippets by include Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 227 screenshots: 227 matched. |
|
Compared 191 screenshots: 191 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Flutter vs Codename OneSame application, built both ways: Flutter's AOT compile of the gallery, and the identical Dart source transpiled to Java on Codename One. Lower is better for every metric, so a ratio above 1.00x means Codename One is ahead by that factor. android9 interleaved rounds; host load 0.45, 1.54, 1.28
Compute -- the VM workloads (
Gate: within tolerance against
javascript9 interleaved rounds; host load 2.03, 1.29, 0.57
Compute -- the VM workloads (
Gate: within tolerance against
linux9 interleaved rounds; host load 0.2, 3.13, 2.67
Compute -- the VM workloads (
Gate: within tolerance against
windows9 interleaved rounds
Compute -- the VM workloads (
Gate: within tolerance against
Codename One wins 18 of 18 measured metrics across 4 platform(s). |
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
Cloudflare Preview
|
|
Compared 206 screenshots: 206 matched. Benchmark ResultsDetailed Performance Metrics
|
|
Compared 206 screenshots: 206 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows x64Runner CPU: AMD64 Family 25 Model 1 Stepping 1, AuthenticAMD (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 206 screenshots: 206 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows arm64Runner CPU: ARMv8 (64-bit) Family 8 Model D49 Revision 0, MICROSOFT CORPORATION (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
- Optional GLES2 compositor for the embedded port (CN1_EMBEDDED_GPU, the linux.embedded.renderer hint, board defaults), with the software raster as fallback and a CI check that both draw the same pixels. The software raster now applies a SOURCE/CLEAR operation alpha as coverage, as Cairo does. - Multicast DNS in Java (com.codename1.impl.MdnsEngine, shared with the backend) over a libc UDP socket (cn1_mdns_impl.h): Bonjour on the Linux ports with no Avahi, and com.codename1.backend.Discovery on the backend. Interoperates with Apple's mDNSResponder (dns-sd browses and resolves it). - com.codename1.qrcode: QR generation (all versions and levels), shared with the backend for SVG; QrCodeImage on the client. - Catch LinkageError in LinuxImplementation: the device class library has no UnsatisfiedLinkError, which broke every translated Linux build. - Print the allocation census before the exit walks, so a server's racing exit no longer loses it (backend-performance gate). - Developer guide prose fixes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… docs gates Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 206 screenshots: 206 matched. ParparVM vs HotSpot (JDK 25): Linux arm64Runner CPU: Neoverse-N2 (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
…(CI shows THP is madvise, 0 kB huge) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…links An idle server mapped libcurl and the distribution's TLS stack behind it (GnuTLS, p11-kit, Kerberos, GMP, Nettle: ~5.5MB of 13.3MB PSS) without ever calling out. Static links keep -lcurl. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
✅ ByteCodeTranslator Quality ReportTest & Coverage
Benchmark Results
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 192 screenshots: 192 matched. Benchmark Results
Detailed Performance Metrics
ParparVM vs HotSpot (JDK 25): macOS arm64Runner CPU: Apple M1 (Virtual) (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
Outbox (com.codename1.io.outbox, shared with the backend) keeps outgoing messages in the session's database, in the caller's transaction, and sends them in order with backoff, at least once, keyed for deduplication. CertificateRequest encodes and signs PKCS#10 requests on either side. ConnectionRequest.setClientCertificate presents a client certificate on JavaSE, Android and Linux (libcurl blobs); the Linux port also honours setInsecure, which it ignored. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
deploy-device writes CN1_PROFILE=device into the unit unless the environment names a profile (cn1.device.profile overrides, empty disables), so one backend module carries device and cloud roles selected with @Profile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…apes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s missing Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # docs/developer-guide/languagetool-accept.txt
…headers Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d with the lazy load Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nable Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…equest fails; bench gates warm start Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 206 screenshots: 206 matched. ParparVM vs HotSpot (JDK 25): Linux x64Runner CPU: AMD EPYC 7763 64-Core Processor (baseline 2 improvements past the baseline (not a failure; rebaseline to lock them in):
Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
A change that moves performance ON PURPOSE records the new baseline in Result: no regression (improved past the baseline: consider rebaselining) |
|
Compared 249 screenshots: 249 matched. |
# Conflicts: # docs/developer-guide/languagetool-accept.txt
…voidUsingHardCodedIP) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
CN1_LINUX_EMBEDDED): DRM/KMS, fbdev or memory display, evdev input, a software rasterizer and FreeType text, with no GTK.scripts/embeddedtranslates and builds for arm64, arm, amd64 and riscv64, and has Raspberry Pi OS, Yocto and Buildroot recipes.com.codename1.hardware): GPIO, I2C, SPI, serial, PWM, CAN, watchdog and backlight. One C implementation (cn1_hardware_impl.h) serves the Linux port and the backend, and the JavaSE simulator has virtual devices.cn1:deploy-devicefor Maven and Gradle: copies the binary over SSH and installs a systemd service.Json.Encoder. This applies to every backend application with no flags.CI
embedded-linux.yml(arm64 runner):backend-performance.yml(arm64 runner):gate.pyjudges speed relative to Rust from the same job, and memory and allocation absolutely.Hardening from review
--ends ssh's options. The binary is streamed over ssh into amktemp -ddirectory instead of a predictable/tmppath that root then installs from. Environment entries are quoted and escaped for systemd./dev/paths. Names containing NUL are refused. I2C transfers over 65535 bytes are rejected instead of silently truncated.Test plan
DeviceDeployerTest(option-injection cases added), backend SpotBugs/PMD 0, build-engine SpotBugs 0, control-character, author/since and copyright checkscheck-demo-run.py(59 fps, first frame 159 ms, 18 MB RSS)🤖 Generated with Claude Code