Skip to content

Archive / page 12

All articles

Every practical article from the Nalar archive, newest first.

Software Engineering 19 Sep 2026 5 min read

LLVM Poison Values Defer Undefined Behavior Through the IR

LLVM IR does not turn every invalid arithmetic or pointer condition into immediate undefined behavior. Many instructions produce a poison value instead. That value can flow through later instructions, preserving the optimizer’s ability to rely on promises such as “this addition does not overflow” without forcing undefined behavior at the exact instruction where the promise is violated. This is part of LLVM’s semantics, not an optimizer implementation detail. A frontend that emits nsw, nuw, inbounds, noundef, or related constraints is stating facts that later passes may trust.

Software Engineering 19 Sep 2026 6 min read

Linux pidfds Bind Process Operations to Stable Kernel References

A numeric process ID names a process only while that PID remains assigned to it. After process exit and reaping, Linux may reuse the number for another process. Code that observes a PID, performs unrelated work, then acts on that number can therefore cross a lifetime boundary that the integer itself does not encode. Linux pidfds provide a file-descriptor reference to a process so later operations can target the referenced process object rather than repeat a numeric PID lookup.

Software Engineering 19 Sep 2026 6 min read

Linux membarrier Moves Memory Ordering Cost to a Coordinating Thread

A concurrent runtime can have thousands of fast-path operations for every rare state transition that requires global coordination. Placing a full memory barrier on every fast path makes each operation pay for that rare transition. Linux membarrier() supports the opposite arrangement: a coordinating thread enters the kernel and forces a defined ordering point across a target set of threads, moving more cost to the infrequent side of the protocol. This is not a generic replacement for atomics, mutexes, or language memory models. It is a Linux kernel interface whose guarantees apply to memory accesses and targeted threads under specific commands. Correct use requires a protocol that already defines which accesses occur before and after the coordination point.

Tech 19 Sep 2026 6 min read

Layer Height Changes FDM Print Detail, Surface Finish, and Time

In fused deposition modeling (FDM), layer height is the vertical distance assigned to each deposited layer. A model sliced at 0.20 mm is built from nominally 0.20 mm-high layers; changing that value changes how the slicer discretizes the model along the Z axis. That one setting affects several things at once: curved surfaces become more or less visibly stepped, small vertical features may be represented differently, each extrusion line changes shape, and the printer needs a different number of layers to reach the same height.

Cybersecurity 19 Sep 2026 7 min read

JWS Key Selection Is a Trust Decision, Not a Header Instruction

JWS Key Selection Is a Trust Decision, Not a Header Instruction A signed token can carry enough metadata to point a verifier toward a key. A JWS protected header can name an algorithm with alg, identify a key with kid, or, in profiles that permit them, carry or reference key material through parameters such as jwk, jku, x5c, or x5u. Those fields are useful for routing verification work, especially during key rotation.

Tech 19 Sep 2026 6 min read

IOMMU Translation Separates Device DMA Addresses from Physical Memory

A DMA-capable device can issue memory transactions without the CPU copying each payload. On systems with an IOMMU, the address carried by that device transaction does not have to be a host physical address. The IOMMU can translate a device-visible I/O virtual address into a physical page and reject accesses outside the configured mapping. That translation boundary changes both isolation and data movement. Drivers and operating systems can give a device a constrained address space, while the hardware must maintain translation state close enough to the I/O path to avoid turning every DMA request into a page-table walk.

Tech 19 Sep 2026 6 min read

IOMMU IOTLB Invalidation Controls When DMA Remapping Takes Effect

IOMMU IOTLB Invalidation Controls When DMA Remapping Takes Effect Changing an IOMMU page-table entry does not necessarily change the translation used by the next DMA request. An IOMMU can cache address translations in an I/O translation lookaside buffer, commonly called an IOTLB. Software must invalidate affected cached state when a mapping is removed or replaced, then observe the invalidation semantics required by that IOMMU before treating the old translation as retired.

Linux 19 Sep 2026 5 min read

io_uring Multishot Requests Persist Across Completion Events

A normal io_uring request has a simple lifetime: userspace submits one SQE and eventually receives one CQE. Multishot operations change that relationship. One submitted request can remain active in the kernel and produce several completion queue entries as matching events occur. That persistence changes completion handling from a one-CQE-per-request assumption into an explicit lifecycle protocol. The decisive state is carried by IORING_CQE_F_MORE: when the flag is present, the originating request can produce another completion; when it is absent, that multishot request has terminated.

Software Engineering 19 Sep 2026 6 min read

io_uring Linked Requests Encode Dependency in Submission Order

An io_uring submission queue can contain many operations at once, but not every operation has to be independent. Setting IOSQE_IO_LINK on a submission queue entry binds it to the next entry, forming a chain in which execution order and failure propagation become part of the kernel-visible request structure. That changes the contract compared with submitting two unrelated SQEs and coordinating them after completion. A linked chain expresses dependency before the kernel starts processing the operations. The distinction matters when a later request is valid only after an earlier request has completed, or when failure of one stage should prevent the remaining stages from running.

Tech 19 Sep 2026 6 min read

Infrared Sensors Measure Different Physical Effects

An infrared sensor is not a single measurement technology. “IR sensor” can describe a reflective proximity detector, a PIR motion detector, a non-contact temperature sensor, an optical encoder, or an infrared receiver. They all operate with radiation outside the visible spectrum, but the quantity being measured is different. That distinction determines what the sensor can detect, how far it can work, and which environmental conditions can produce false or weak readings.

Cybersecurity 19 Sep 2026 6 min read

IMA Appraisal Binds File Access to Integrity Metadata

A file can have ordinary read or execute permission and still fail an integrity check at the kernel boundary. Linux Integrity Measurement Architecture (IMA) appraisal can apply policy rules at selected hooks and require file content to agree with integrity metadata before the covered operation proceeds. This adds a content-integrity condition to access decisions without turning Unix mode bits or application authorization into integrity mechanisms. IMA contains related but distinct functions. Measurement records file state in an integrity measurement list and can extend measurements into a TPM. Appraisal evaluates a file against integrity metadata and can reject access when policy and enforcement mode require a valid result. Audit records security-relevant state. A deployment that only measures files gains evidence about observed state; it does not automatically gain the blocking behavior associated with appraisal.

Linux 19 Sep 2026 6 min read

Idmapped Mounts Remap Ownership Without Rewriting Inodes

The same inode can appear with different ownership through two mount points without any recursive chown(). Linux idmapped mounts attach an ID mapping to a mount, so VFS ownership presentation and permission checks can translate user and group IDs for that view while the ownership stored by the filesystem remains unchanged. This property separates persistent inode metadata from the identity view exposed at a particular mount. It is especially useful when a filesystem tree must be shared with a container whose user namespace maps IDs differently from the host.

Software Engineering 19 Sep 2026 6 min read

Idempotency Keys Bound Retry Safety to a Request Identity

A client can send the same logical operation more than once even when it intended one effect. A timeout after POST /payments leaves an ambiguous boundary: the server may have committed the payment while the client received no response. Retrying restores delivery, but an ordinary retry can create a second payment. An idempotency key changes the interface by giving repeated attempts a stable request identity. The key is not a substitute for transactionality, and it does not make every operation intrinsically idempotent. It creates a protocol between client and server: attempts carrying the same key are treated as candidates for the same logical operation. The server still needs rules for request equivalence, concurrent arrival, persistence lifetime, failure recovery, and response replay.

Software Engineering 19 Sep 2026 7 min read

Idempotency Keys Bind Retries to One Logical Mutation

A client can lose an HTTP response after the server has committed the requested mutation. From the client’s perspective, the operation is unresolved: the connection failed, but that failure does not reveal whether durable state changed. Retrying the same POST can then create a second order, payment attempt, reservation, or other mutation. An idempotency key gives the retry a stable identity that is separate from any single transport attempt. The server can associate repeated requests carrying that identity with one logical operation. That mechanism narrows an ambiguity at the API boundary, but the key alone is not a guarantee. Its scope, persistence, request comparison, concurrency control, and replay policy determine what repeated delivery actually means.

Cybersecurity 19 Sep 2026 6 min read

HTTP/1.1 Framing Disagreement Creates a Request Smuggling Boundary

HTTP/1.1 Framing Disagreement Creates a Request Smuggling Boundary An HTTP/1.1 connection can carry multiple requests in sequence. Each recipient therefore has to decide exactly where one request ends before it can parse the next. In a direct client-to-origin connection, one parser makes that decision. In a deployment with a reverse proxy, gateway, load balancer, cache, or other intermediary, the same byte stream can cross several parsers before reaching application code.

Cybersecurity 19 Sep 2026 4 min read

HSTS State Closes the First-Request Downgrade Window

HSTS State Closes the First-Request Downgrade Window A site can redirect every HTTP request to HTTPS and still expose a gap before that redirect arrives. The browser has already sent an HTTP request across the network. An active intermediary can alter that exchange, suppress the redirect, or keep the client on plaintext HTTP. HTTP Strict Transport Security (HSTS), defined by RFC 6797, changes where the decision occurs. After receiving a valid Strict-Transport-Security header over a secure connection, a conforming user agent records policy state for the host. A later HTTP navigation to that host is converted to HTTPS locally before the insecure request is emitted.

JavaScript 19 Sep 2026 5 min read

How Node.js Chooses Between .mjs, .cjs, and .js Module Formats

Node.js can execute JavaScript through two module systems: ECMAScript modules (ESM) and CommonJS. The filename is one of the signals that selects between them, which is why files such as postcss.config.mjs appear in projects even when most source files still end in .js. The important detail is that .mjs is not a different JavaScript language. It is an explicit instruction to Node.js: parse and load this file as an ES module.

Linux 19 Sep 2026 4 min read

How Linux Maps an ESP32 USB-UART Bridge to /dev/ttyUSB0 on Fedora

An ESP32 development board connected through a CH341 USB-to-UART bridge does not appear on Fedora as a Windows-style COM port. Linux binds the USB interface to a serial driver and exposes a character device such as /dev/ttyUSB0. A working connection can produce this kernel message: usb 5-1: ch341-uart converter now attached to ttyUSB0 That line confirms USB enumeration, binding to the ch341 serial driver, and creation of ttyUSB0. The path used by a flasher or serial monitor is therefore /dev/ttyUSB0.

Software Engineering 19 Sep 2026 7 min read

How Language Runtimes Use CPU Cores: Threads, Goroutines, Workers, and Processes

A CPU with many cores does not make application code parallel by itself. The operating system can schedule multiple threads at the same time, but the language and runtime decide how application work reaches those threads. That distinction explains why Go, Rust, C++, Java, JavaScript, and PHP can all use a multicore machine even though their programming models look very different. The useful question is not simply whether a language is “multithreaded.” It is how a unit of application work becomes something the operating system can schedule.

Software Engineering 19 Sep 2026 5 min read

How GitHub Codespaces Uses Core-Hours, Port Forwarding, and CI

A GitHub Codespace is a development machine running in the cloud, not a CI runner with an editor attached. It stays interactive while a developer edits files, runs commands, starts servers, debugs processes, and commits changes. That distinction explains three behaviors that are easy to confuse: how compute quota is measured, how localhost becomes reachable from a browser, and where CI begins after code is pushed. Core-hours measure machine capacity multiplied by active time Codespaces compute usage is measured in core-hours. The accounting model is straightforward:

Tech 19 Sep 2026 6 min read

Hacker and Developer Forums Serve Different Technical Workflows

A developer asking why a PostgreSQL query ignores an index needs a different community from a security researcher comparing exploit mitigations or an Android developer debugging a device-specific kernel problem. They may all be called forums, but their information systems work differently. Some communities optimize for a precise question and a reusable answer. Others preserve long discussions, attach conversation to a software project, publish security research, or rank links that engineers consider worth discussing. Choosing the right venue changes both the quality of the response and how useful the discussion remains months later.

Cybersecurity 19 Sep 2026 8 min read

GrapheneOS Security Boundaries: Android Hardening, the Baseband, and IMEI

GrapheneOS can change how Android isolates applications, how privileged services are exposed, how the operating system is verified at boot, and how much authority Google Play receives. It cannot turn every property of a phone into an operating-system setting. IMEI is a useful example of that boundary. GrapheneOS explicitly states that changing the IMEI is not possible on a production device and that the operating system cannot add support for it because the hardware does not support that operation. The distinction is architectural: Android controls a large software stack, but the cellular modem and device identity mechanisms are not ordinary application data stored inside the Android user space.

Tech 19 Sep 2026 7 min read

GPS Distance and IMU Balance on ESP32 Measure Different Things

A GPS module and an IMU can both feed an ESP32 with numbers that describe motion, but they observe different physical quantities. Treating them as interchangeable sensors creates bad measurements quickly. A GPS receiver estimates geographic position from satellite signals. Two position fixes can be converted into an approximate distance across Earth’s surface. An IMU such as the MPU-6050 measures acceleration and angular rate along its axes. Those measurements can be used to estimate tilt, rotation, and short-term motion.

Tech 19 Sep 2026 7 min read

Gesture-Controlled Air Conditioner with ESP32-S3 Without a Camera

A camera is unnecessary when an air-conditioner controller only needs a small vocabulary of hand motions. The useful signal is not an image of the hand; it is a directional event such as up, down, left, or right. A short-range optical gesture sensor can reduce that input to a few bytes before the ESP32-S3 sees it. That changes the embedded design substantially. There is no camera frame buffer, DVP bus, image preprocessing, or inference model competing with the LCD and infrared transmitter. The ESP32-S3 can spend its resources on the part that actually needs careful handling: keeping the intended AC state synchronized with each gesture and encoding that state into the appliance’s IR protocol.