<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://nebulosa.io/blog/rss.xml" rel="self" type="application/atom+xml" /><link href="https://nebulosa.io/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-11-09T05:13:52+00:00</updated><id>https://nebulosa.io/blog/rss.xml</id><title type="html">Nebulosa</title><subtitle>AI-first engineering from Latin America: AI-powered products and the cloud platforms that run them.</subtitle><entry><title type="html">Any password works, if it’s long enough</title><link href="https://nebulosa.io/blog/any-password-works-if-its-long-enough" rel="alternate" type="text/html" title="Any password works, if it’s long enough" /><published>2026-11-05T00:00:00+00:00</published><updated>2026-11-05T00:00:00+00:00</updated><id>https://nebulosa.io/blog/any-password-works-if-its-long-enough</id><content type="html" xml:base="https://nebulosa.io/blog/any-password-works-if-its-long-enough"><![CDATA[<p>On November 5, OpenSSH shipped an emergency release and Alpine Linux published an advisory. The bug, nicknamed sshole, lets anyone log in to certain accounts on Alpine servers with any password between 257 and 1,024 characters. One connection, no brute force.</p>

<h2 id="two-defaults-that-collide">Two defaults that collide</h2>

<p>Since 2012, musl’s crypt() returns “*” when it can’t hash a password, and anything over 256 bytes fails. “*” is also what Linux stores for an account with no password. Long password in, “*” out, “*” on file: login accepted. A 2016 OpenSSH change makes sshd borrow another account’s salt, so the attack only needs one user on the box with a real password.</p>

<h2 id="whos-exposed">Who’s exposed</h2>

<p>All four at once: Alpine (or another musl system) running OpenSSH without PAM, which is how Alpine ships it; password logins on, the default; an account with no password set (“*”, not locked with “!”); and another account that has one. Debian, Ubuntu, PAM setups and containers that don’t run sshd are fine.</p>

<p>Where it bites: a payroll SaaS takes client files over SFTP in an Alpine container. Clients use passwords, the internal ops account uses keys only. Anyone who reaches port 22 can sign in as ops. Or an Alpine cloud VM whose alpine user (passwordless doas, so root) was safe until someone added a password account for an auditor.</p>

<h2 id="what-to-do-now">What to do now</h2>

<ul>
  <li>Run <code class="language-plaintext highlighter-rouge">apk upgrade -U -a</code> and restart sshd. Upgrading the package doesn’t replace the running daemon.</li>
  <li>Turn off password logins wherever keys work.</li>
  <li>Lock unused accounts with “!” instead of leaving them empty.</li>
  <li>Search auth logs for “Accepted password for” on key-only users. If you can’t rule one out, treat the host as compromised.</li>
</ul>

<p>The same week, a Paint RCE fix that some Windows fleets couldn’t get from the Store, and an AI coding agent sending its user’s email to third-party sites, made the same point: the risk sits in defaults nobody reviewed.</p>

<h2 id="how-nebulosa-helps">How Nebulosa helps</h2>

<p>We inventory what actually runs on your hosts, VMs and edge devices, enforce SSH and account baselines in CI, and keep one patch report across packages, images and apps. Send us your list of base images and hosts, and within days you’ll know which ones would have let a 257-character password in.</p>

<h2 id="sources">Sources</h2>

<ul>
  <li><a href="https://alpinelinux.org/posts/2026-11-05-openssh-password-authentication-bypass/">Alpine Linux: Security advisory, openssh-server password authentication bypass</a></li>
  <li><a href="https://www.upwind.io/blog/sshole-alpine-musl-openssh-accepts-any-257-character-password">Upwind: sshole, Alpine/musl OpenSSH accepts any 257+ character password</a></li>
  <li><a href="https://lwn.net/Articles/1105464/">LWN.net: Critical security vulnerability affects OpenSSH on Alpine Linux systems</a></li>
  <li><a href="https://www.techzine.eu/news/security/145581/paint-vulnerability-allows-rce-patch-is-hard-to-find/">Techzine: Paint vulnerability allows RCE, patch is hard to find</a></li>
  <li><a href="https://github.com/anthropics/claude-code/issues/101659">GitHub: anthropics/claude-code issue #101659</a></li>
</ul>]]></content><author><name>Nebulosa</name></author><category term="DevSecOps" /><category term="CyberSecurity" /><category term="OpenSSH" /><category term="CloudSecurity" /><summary type="html"><![CDATA[A musl quirk lets any 257+ character password log in to some Alpine servers running OpenSSH without PAM. Who's exposed and what to do now.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://nebulosa.io/assets/img/blog/any-password-works-if-its-long-enough.png" /><media:content medium="image" url="https://nebulosa.io/assets/img/blog/any-password-works-if-its-long-enough.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">AI multiplies your engineers. Including the bad ones.</title><link href="https://nebulosa.io/blog/ai-multiplies-your-engineers" rel="alternate" type="text/html" title="AI multiplies your engineers. Including the bad ones." /><published>2026-10-26T00:00:00+00:00</published><updated>2026-10-26T00:00:00+00:00</updated><id>https://nebulosa.io/blog/ai-multiplies-your-engineers</id><content type="html" xml:base="https://nebulosa.io/blog/ai-multiplies-your-engineers"><![CDATA[<p>A weak engineer used to cost you a slow sprint. A few hundred lines a week, a reviewer catching most of the mess, a manager noticing by month two.</p>

<p>With a coding agent, that same engineer ships four thousand lines before Friday. The pull requests look clean, the tests are green, and the design decisions underneath are still bad. Only now there are ten times as many of them, spread across your codebase.</p>

<h2 id="the-data-agrees">The data agrees</h2>

<p>Google’s DORA team surveyed nearly 5,000 technology professionals for its 2025 report on AI-assisted development. Their headline: AI acts as an amplifier. It magnifies what high-performing teams already do well, and the dysfunctions of teams that struggle. Throughput went up with AI adoption. Delivery instability kept rising too.</p>

<p>GitClear analyzed 211 million lines of code and found the same pattern from another angle. In 2024, code blocks with five or more duplicated lines grew eightfold, and moved (refactored) lines fell almost 40%. It was the first year copy-paste outnumbered refactoring.</p>

<p>Agents write code fast. Whether that code stays cheap to change depends on the person steering them.</p>

<h2 id="what-it-looks-like-in-a-real-business">What it looks like in a real business</h2>

<p>A fintech reconciliation service. The agent needs rounding rules and writes them inline, four times, in four files. Months later, a regulator changes the rule. Someone updates three of them. The fourth produces a one-cent mismatch per transaction that finance spends a quarter chasing.</p>

<p>A marketplace order API. A junior asks for “retry on failure” and gets exactly that, minus an idempotency key. Under load, the payment provider times out, the job retries, and a slice of customers are charged twice on your biggest sales day.</p>

<p>A SaaS reporting module. Every new report gets its own query, written from scratch by the agent. Each one is fine alone. Together they turn the database into the bottleneck, and nobody can say which of 60 near-identical queries to optimize.</p>

<p>A logistics schema migration. Generated in seconds, reviewed in minutes, no down migration. It works in staging. In production it locks a table during peak hours, and rolling back means a manual restore.</p>

<p>None of these are model failures. The model did what it was asked. The missing piece was someone who knew what to ask, and what to reject.</p>

<h2 id="what-a-good-engineer-adds-now">What a good engineer adds now</h2>

<p>Typing speed stopped being a differentiator. What separates engineers in 2026 is judgment:</p>

<ul>
  <li>They read what the agent wrote. Every line that reaches main has an owner who can explain it.</li>
  <li>They keep the system coherent. Before generating something new, they check whether it already exists and extend it.</li>
  <li>They specify before they prompt. Constraints, failure modes and edge cases go into the task, not into the postmortem.</li>
  <li>They write the tests the agent can’t guess. Business rules, money paths and concurrency get explicit checks.</li>
  <li>They delete code. Smaller diffs, fewer abstractions, less for the next person and the next agent to misread.</li>
</ul>

<p>A strong engineer with an agent is a small team. A weak one with an agent is a growing maintenance bill.</p>

<h2 id="how-nebulosa-staffs-your-team">How Nebulosa staffs your team</h2>

<p>Nebulosa provides managed engineering contractors from Latin America for companies that need to grow their team or run part of it. You get engineers who work in your stack, your time zone and your repos, and we handle the rest:</p>

<ul>
  <li>Screening for judgment. Candidates review an AI-generated pull request and tell us what they’d send back, and why.</li>
  <li>Working agreements for AI. Clear rules on which agents are used, what needs human review and how changes are tested, agreed with you on day one.</li>
  <li>Ongoing management. Code quality checks, performance follow-up and replacement if someone isn’t a fit, so your leads aren’t doing HR.</li>
  <li>One contract. English and Spanish, US time-zone overlap, scale up or down as your roadmap changes.</li>
</ul>

<p>The cost of a bad hire grew with every model release. The upside of a good one grew faster.</p>

<h2 id="sources">Sources</h2>

<ul>
  <li><a href="https://dora.dev/research/ai">DORA, 2025 State of AI-assisted Software Development, Google Cloud</a></li>
  <li><a href="https://www.infoq.com/news/2025/09/dora-state-of-ai-in-dev-2025">InfoQ, DORA 2025: State of AI-assisted Software Development</a></li>
  <li><a href="https://devclass.com/2025/02/20/ai-is-eroding-code-quality-states-new-in-depth-report/">DevClass, AI is eroding code quality, states new in-depth report (GitClear, 2025)</a></li>
</ul>]]></content><author><name>Nebulosa</name></author><category term="AIEngineering" /><category term="StaffAugmentation" /><category term="Nearshore" /><category term="SoftwareQuality" /><summary type="html"><![CDATA[Coding agents amplify whoever steers them. What that looks like in real systems, and how Nebulosa screens engineers for judgment.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://nebulosa.io/assets/img/blog/ai-multiplies-your-engineers.png" /><media:content medium="image" url="https://nebulosa.io/assets/img/blog/ai-multiplies-your-engineers.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Who’s watching checkout at 3 a.m.?</title><link href="https://nebulosa.io/blog/whos-watching-checkout-at-3am" rel="alternate" type="text/html" title="Who’s watching checkout at 3 a.m.?" /><published>2026-10-20T00:00:00+00:00</published><updated>2026-10-20T00:00:00+00:00</updated><id>https://nebulosa.io/blog/whos-watching-checkout-at-3am</id><content type="html" xml:base="https://nebulosa.io/blog/whos-watching-checkout-at-3am"><![CDATA[<p>Production rarely breaks at noon. It breaks at 3 a.m., quietly: a queue that keeps growing, a config change that only hurts one region.</p>

<p>AI agents suit this kind of watch. They don’t sleep and they don’t get bored. Their limit is context: a model sees only so much text at once, and a full stack, with its logs, metrics and code, will never fit. Ask one agent to cover all of it and it either samples too thin or forgets what it saw an hour ago.</p>

<h2 id="one-subsystem-one-specialist">One subsystem, one specialist</h2>

<p>Split the stack the way your team already does, and give each part its own agent:</p>

<ul>
  <li>Narrow context. It reads only its subsystem’s logs, metrics and code.</li>
  <li>Read-only. It can query and investigate, never deploy or restart.</li>
  <li>Cheap by default. It writes its checks once, a scheduler runs them, and a stronger model joins only when something looks off.</li>
</ul>

<p>A coordinator sits on top. It never sees raw logs, only short findings, and turns three related signals into one incident for the on-call engineer.</p>

<h2 id="where-wed-start">Where we’d start</h2>

<ul>
  <li>Payments: decline rates by bank and webhook delays, caught before support hears about them.</li>
  <li>Checkout: checks written for each release’s diff, ending in a clear keep-or-roll-back call.</li>
  <li>Nightly data load: stale tables flagged before the 8 a.m. meeting.</li>
  <li>Cloud bill: a forgotten debug log or a stuck autoscaler, spotted the same day.</li>
</ul>

<h2 id="start-with-one">Start with one</h2>

<p>Pick the subsystem that hurts most when it fails silently. We’ll build its specialist on your telemetry, read-only, next to the alerts you already have.</p>]]></content><author><name>Nebulosa</name></author><category term="AIAgents" /><category term="SRE" /><category term="Observability" /><category term="DevOps" /><summary type="html"><![CDATA[One read-only AI agent per subsystem, plus a coordinator that pages a person once. How we'd watch production at 3 a.m.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://nebulosa.io/assets/img/blog/whos-watching-checkout-at-3am.png" /><media:content medium="image" url="https://nebulosa.io/assets/img/blog/whos-watching-checkout-at-3am.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Your app, read back to you</title><link href="https://nebulosa.io/blog/your-app-read-back-to-you" rel="alternate" type="text/html" title="Your app, read back to you" /><published>2026-10-16T00:00:00+00:00</published><updated>2026-10-16T00:00:00+00:00</updated><id>https://nebulosa.io/blog/your-app-read-back-to-you</id><content type="html" xml:base="https://nebulosa.io/blog/your-app-read-back-to-you"><![CDATA[<p>An open-source project called REA went viral this week. It lets AI coding agents drive professional reverse-engineering tools like Ghidra and IDA, so anyone can ask “how does this app work?” and get an answer with evidence.</p>

<p>If your company ships software, here’s what that means:</p>

<ul>
  <li>Fintech: your Android app holds discount rules and fraud thresholds. An agent can pull them out in an afternoon. Find out what’s exposed and move it server-side.</li>
  <li>Distribution: a 2008 Delphi system with no source code and no vendor. An agent maps its business rules, so the migration starts from facts.</li>
  <li>Retail: before you embed a third-party SDK, check what data it sends and where it goes, ahead of an LFPDPPP or LGPD audit.</li>
  <li>Health and industry: connect to equipment that exports undocumented formats, without months of manual analysis.</li>
</ul>

<p>The tool is the easy part. The real work is doing it with authorization, validating every finding with tests and fixing what turns up. That’s what we do.</p>

<p>Want to know what an AI agent can learn from your app? We’ll run a proof of concept on your own build.</p>]]></content><author><name>Nebulosa</name></author><category term="AI" /><category term="CyberSecurity" /><category term="ReverseEngineering" /><category term="DevSecOps" /><summary type="html"><![CDATA[AI agents can now drive Ghidra and IDA. What an attacker can learn from your app, and how we run that check on your own build first.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://nebulosa.io/assets/img/blog/your-app-read-back-to-you.png" /><media:content medium="image" url="https://nebulosa.io/assets/img/blog/your-app-read-back-to-you.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Not every AI decision needs a chatbot</title><link href="https://nebulosa.io/blog/not-every-ai-decision-needs-a-chatbot" rel="alternate" type="text/html" title="Not every AI decision needs a chatbot" /><published>2026-10-06T00:00:00+00:00</published><updated>2026-10-06T00:00:00+00:00</updated><id>https://nebulosa.io/blog/not-every-ai-decision-needs-a-chatbot</id><content type="html" xml:base="https://nebulosa.io/blog/not-every-ai-decision-needs-a-chatbot"><![CDATA[<p>Jev put a new kind of AI model on the map: decision models. No chat, no text. You send data, you get typed answers with a confidence score, in milliseconds and at a fraction of LLM prices.</p>

<p>Where they pay off:</p>

<ul>
  <li>Support triage: one pass per ticket returns the queue, urgency (1–5), “is this a refund request?” and “is this customer about to churn?”. High-confidence tickets route themselves; the rest go to a person.</li>
  <li>Agent guardrails: before an AI agent sends an email, issues a refund or runs a database migration, a second model checks it: within policy? prompt injection? It blocks in milliseconds, not seconds.</li>
  <li>Model routing: decide per request whether it needs a frontier model or a small one, so you pay premium prices only when it matters.</li>
  <li>Alert triage: score every alert for “actionable or noise” and send it to the right on-call team, so nobody gets paged at 3 a.m. for nothing.</li>
</ul>

<p>You can run it on Jev’s API or on open-source models like Laya or Kev inside your own cloud, so your data never leaves your infrastructure.</p>

<p>The model is the easy part. The real work is choosing the right questions, calibrating the thresholds and wiring it into your systems. That’s what we do.</p>

<p>Want to see it on your own data? Send us a sample and we’ll build you a proof of concept.</p>]]></content><author><name>Nebulosa</name></author><category term="AIEngineering" /><category term="AIAgents" /><category term="LLMOps" /><category term="Automation" /><category term="OpenSource" /><summary type="html"><![CDATA[Decision models return typed answers with a confidence score in milliseconds. Four places they pay off: triage, guardrails, routing and alerts.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://nebulosa.io/assets/img/blog/not-every-ai-decision-needs-a-chatbot.png" /><media:content medium="image" url="https://nebulosa.io/assets/img/blog/not-every-ai-decision-needs-a-chatbot.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Rewriting C in Rust is now a project you can scope</title><link href="https://nebulosa.io/blog/rewriting-c-in-rust-is-now-a-project-you-can-scope" rel="alternate" type="text/html" title="Rewriting C in Rust is now a project you can scope" /><published>2026-10-05T00:00:00+00:00</published><updated>2026-10-05T00:00:00+00:00</updated><id>https://nebulosa.io/blog/rewriting-c-in-rust-is-now-a-project-you-can-scope</id><content type="html" xml:base="https://nebulosa.io/blog/rewriting-c-in-rust-is-now-a-project-you-can-scope"><![CDATA[<p>For years, “rewrite it in Rust” was a good idea that no budget could carry. A mature C library is thousands of lines of pointer logic, and nobody wanted to retype it by hand.</p>

<p>That changed in 2026. <a href="https://bughunters.google.com/blog/scaling-memory-safety">Google’s security team</a> now has AI agents doing the first draft of C-to-Rust migrations, and engineers spending their time on verification instead of typing.</p>

<p>The pressure behind it is not new. Memory safety bugs account for about 70% of vulnerabilities in C and C++ codebases, according to Google’s security team. What is new is the clock: as models get better at finding bugs, the time between discovery and exploit keeps shrinking.</p>

<h2 id="what-google-showed-this-fall">What Google showed this fall</h2>

<p>Two Google announcements, weeks apart, moved this from research to practice.</p>

<p><strong>The pilot: giflib.</strong> Google’s security team <a href="https://bughunters.google.com/blog/scaling-memory-safety">rewrote giflib</a>, a widely used C library for GIF images, using Gemini.</p>

<ul>
  <li>About 3,000 lines of C, translated to Rust in one shot.</li>
  <li>The first draft had “an initially very unsound memory management pattern” at the C boundary. Engineers iterated with the model until experts signed off on every unsafe block.</li>
  <li>Validation: 30 million real GIFs with identical output, and a differential fuzzer running C and Rust side by side for six days and 200 million iterations with no deviations.</li>
  <li>In production it was performance-neutral, and it let some services drop the sandbox they ran around the C library.</li>
  <li>Soon after rollout, a new heap overflow was reported in the C original (CVE-2026-26740). Google’s services were already on Rust. The port is open source as <a href="https://github.com/google/giflib-rs">giflib-rs</a>.</li>
</ul>

<p><strong>The model: Gemini 4 Argon.</strong> On September 30, Google announced <a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-4-argon/">Gemini 4 Argon</a>. It is a general frontier model, but migrations were one of its headline uses.</p>

<ul>
  <li>Argon agents are moving C/C++ codebases to Rust across Google, from core libraries like re2 and libgav1 up to the 800K+ line Fuchsia Zircon kernel.</li>
  <li>In libgav1, a video decoder, agents replaced 32K lines of SIMD code with safe Rust the compiler can vectorize. It runs 2.7x faster than the earlier Rust port, with identical video output.</li>
  <li>Access is limited for now: trusted cyber defenders first, then paid API customers and Google AI Ultra subscribers.</li>
</ul>

<h2 id="the-translation-is-the-easy-part">The translation is the easy part</h2>

<p>Google’s own write-up is clear that AI rewrites are not hands-off. The work moved from typing code to proving it behaves the same. Four things decide whether a rewrite reaches production:</p>

<ul>
  <li><strong>The C boundary.</strong> Existing callers still speak C, so the Rust library has to expose the same API. That layer is unsafe by nature, and pointer ownership there needs an expert’s eye on every line.</li>
  <li><strong>Proof of equivalence.</strong> Google says you need “large amounts of real-world data or good existing tests.” Without a corpus of real inputs, there is nothing to compare the Rust version against.</li>
  <li><strong>Trust and rollback.</strong> Service owners will not swap a dependency on faith. Google calls it the social side of security: transparent validation and a defined way back.</li>
  <li><strong>Life after the rewrite.</strong> A fork in a new language drifts from upstream. If the C project is still active, someone has to own that gap.</li>
</ul>

<p>Scope matters too. Google picked giflib because it was small, stable and had no SIMD or assembly. Hand-tuned SIMD code, like libgav1’s, took many rounds of profile-guided work.</p>

<h2 id="how-we-run-a-c-to-rust-rewrite">How we run a C-to-Rust rewrite</h2>

<p>We start with the test oracle, not the translation. The order matters, because every later step depends on having something to compare against.</p>

<ol>
  <li><strong>Pick the right target.</strong> Rank your C components by exposure (does it parse untrusted input?), size, SIMD or assembly, and how active upstream is. Start where risk is high and complexity is low.</li>
  <li><strong>Build the oracle first.</strong> Collect real inputs from production, existing tests and fuzz corpora. Set up a harness that runs the C and Rust versions side by side on the same input.</li>
  <li><strong>Draft with AI.</strong> A frontier model writes the first Rust version. For a mechanical baseline, open source <a href="https://github.com/immunant/c2rust">C2Rust</a> can transpile C99 to unsafe Rust inside your own infrastructure, so code never leaves it.</li>
  <li><strong>Harden the C boundary.</strong> Keep the same API so callers don’t change. Every unsafe block gets a human review, and ownership rules at the boundary are written down.</li>
  <li><strong>Prove it behaves the same.</strong> Regression on real data plus differential fuzzing. Every mismatch goes back to the model as a targeted fix until the fuzzer runs clean.</li>
  <li><strong>Ship it behind a switch.</strong> Canary or blue-green rollout, the C version kept as fallback, and metrics on latency and errors from day one.</li>
  <li><strong>Decide on upstream.</strong> Maintain a fork, contribute back, or plan an idiomatic rewrite later. Someone owns that call before go-live.</li>
</ol>

<h2 id="where-a-rewrite-pays-off-first">Where a rewrite pays off first</h2>

<ul>
  <li><strong>Parsers for user uploads.</strong> Images, PDFs, archives and spreadsheets go through C libraries that read untrusted bytes. A Rust drop-in with the same API closes the memory bug class there, and can retire the sandbox you run around it.</li>
  <li><strong>Network-facing protocol code.</strong> Gateways, proxies and device agents that decode packets in C. Moving the decoder to Rust removes the most exposed memory-unsafe code from the edge, without touching the rest of the stack.</li>
  <li><strong>Native extensions in Python or Node services.</strong> A C extension that occasionally crashes a worker is a classic hidden cost. Rewritten in Rust behind the same interface, the service code doesn’t change and the crashes have one less place to come from.</li>
  <li><strong>The C module nobody wants to touch.</strong> Every company has one: critical, undocumented, owned by whoever is left. A verified Rust version with a test oracle around it turns it back into code your team can change.</li>
</ul>

<h2 id="bring-us-your-c">Bring us your C</h2>

<p>The model writes the first draft fast. The real work is choosing what to migrate, building the oracle, owning the unsafe boundary and shipping with a way back. That’s what we do.</p>

<p>Have a C library that reads untrusted input? Send us the repo and a sample of real inputs. We’ll build a proof of concept: a Rust drop-in running side by side with your C version under a differential fuzzer, so you see the evidence before you decide.</p>

<h2 id="sources">Sources</h2>

<ul>
  <li><a href="https://bughunters.google.com/blog/scaling-memory-safety">Scaling Memory Safety: AI-Assisted Rewrites of C/C++ Dependencies to Rust, Google Bug Hunters</a></li>
  <li><a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-4-argon/">Gemini 4 Argon: our next era of frontier intelligence, Google, Sep 30, 2026</a></li>
  <li><a href="https://github.com/google/giflib-rs">google/giflib-rs, GitHub</a></li>
  <li><a href="https://github.com/immunant/c2rust">immunant/c2rust, GitHub</a></li>
</ul>]]></content><author><name>Nebulosa</name></author><category term="Rust" /><category term="MemorySafety" /><category term="DevSecOps" /><category term="AppSec" /><category term="AIEngineering" /><summary type="html"><![CDATA[AI now writes the first draft of C-to-Rust migrations. The real work is the test oracle, the unsafe boundary and a way back. How we run it.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://nebulosa.io/assets/img/blog/rewriting-c-in-rust-is-now-a-project-you-can-scope.png" /><media:content medium="image" url="https://nebulosa.io/assets/img/blog/rewriting-c-in-rust-is-now-a-project-you-can-scope.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>