<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Suman Mandal</title>
    <description>The latest articles on DEV Community by Suman Mandal (@jijo-007).</description>
    <link>https://dev.to/jijo-007</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3293123%2F74ece689-d664-40f1-b78f-5cb1b1e0875f.jpg</url>
      <title>DEV Community: Suman Mandal</title>
      <link>https://dev.to/jijo-007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jijo-007"/>
    <language>en</language>
    <item>
      <title>ChainRisk Lens: AI-Powered Software Supply-Chain Investigation from SBOMs</title>
      <dc:creator>Suman Mandal</dc:creator>
      <pubDate>Fri, 02 Oct 2026 17:26:45 +0000</pubDate>
      <link>https://dev.to/jijo-007/chainrisk-lens-ai-powered-software-supply-chain-investigation-from-sboms-57b9</link>
      <guid>https://dev.to/jijo-007/chainrisk-lens-ai-powered-software-supply-chain-investigation-from-sboms-57b9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;ChainRisk Lens&lt;/strong&gt;, an open-source AI-assisted software supply-chain investigation tool.&lt;/p&gt;

&lt;p&gt;I built it for a friend who works with software dependencies and needs a simpler way to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“If this dependency is compromised, what could be affected?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ChainRisk Lens takes a CycloneDX SBOM, builds a deterministic dependency graph, calculates potential downstream impact, traces dependency paths, and uses an open-weight AI model to explain and investigate the evidence.&lt;/p&gt;

&lt;p&gt;The key idea is simple: &lt;strong&gt;deterministic analysis produces the security evidence; AI explains and investigates it.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/jijo-OO7/ChainRisk-Lens" rel="noopener noreferrer"&gt;https://github.com/jijo-OO7/ChainRisk-Lens&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;chainrisk-lens investigate &lt;span class="se"&gt;\&lt;/span&gt;
  testdata/minimal-cyclonedx.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--target&lt;/span&gt; library@2.3.4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--model&lt;/span&gt; gemma4:e2b &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--question&lt;/span&gt; &lt;span class="s2"&gt;"What could be affected if this component is compromised?"&lt;/span&gt;

Code
ChainRisk Lens on GitHub
The core pipeline is:
CycloneDX SBOM
      ↓
Parser / Normalization
      ↓
Dependency Graph
      ↓
Deterministic Impact Analysis
      ↓
Investigation Evidence
      ↓
Open-Weight AI
      ↓
Human / JSON Report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;ChainRisk Lens is written in Go and uses a standard-library-only core.&lt;br&gt;
For AI investigation, I integrated Ollama and designed the model layer to remain provider/model agnostic. The project's default model is Gemma, while other Ollama-compatible models can be selected through --model.&lt;/p&gt;

&lt;p&gt;The deterministic layer handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SBOM parsing and validation&lt;/li&gt;
&lt;li&gt;dependency graph construction&lt;/li&gt;
&lt;li&gt;impact analysis&lt;/li&gt;
&lt;li&gt;dependency paths&lt;/li&gt;
&lt;li&gt;cycle detection&lt;/li&gt;
&lt;li&gt;evidence validation
The AI layer receives that validated evidence and is instructed not to invent CVEs, vulnerabilities, severity, exploitability, affected versions, or remediation facts.
This keeps the security facts deterministic while using AI for investigation and explanation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open-weight AI makes it possible to run the investigation locally rather than requiring users to send their software supply-chain data to a proprietary AI API.&lt;br&gt;
It also keeps the architecture flexible: the deterministic analysis does not depend on a particular model, and users can choose an Ollama-compatible model appropriate for their environment.&lt;br&gt;
For supply-chain security, keeping control over where dependency information is processed is an important part of the design.&lt;/p&gt;

&lt;p&gt;Prize Categories&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma — ChainRisk Lens uses Gemma as its default open-weight AI investigation model.&lt;/li&gt;
&lt;li&gt;Best Use of GitHub Copilot — Copilot was used extensively during implementation, testing, review, and refinement of the project.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>mlhacks</category>
    </item>
    <item>
      <title>From Design Discussions to Production: Building Report Metadata Protection in Kubescape</title>
      <dc:creator>Suman Mandal</dc:creator>
      <pubDate>Thu, 30 Jul 2026 06:29:43 +0000</pubDate>
      <link>https://dev.to/jijo-007/from-design-discussions-to-production-building-report-metadata-protection-in-kubescape-de2</link>
      <guid>https://dev.to/jijo-007/from-design-discussions-to-production-building-report-metadata-protection-in-kubescape-de2</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ua2bzlt6fahppfhnqn4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ua2bzlt6fahppfhnqn4.jpg" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This article focuses on the engineering journey behind designing and implementing &lt;strong&gt;Report Metadata Protection&lt;/strong&gt; in &lt;strong&gt;Kubescape v4.0.11&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you're looking for installation instructions, usage examples, or command reference for &lt;code&gt;--hide&lt;/code&gt;, &lt;code&gt;--encrypt&lt;/code&gt;, and &lt;code&gt;kubescape decrypt&lt;/code&gt;, please refer to the official Kubescape documentation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Official Documentation:&lt;/strong&gt; &lt;a href="https://kubescape.io/docs/scanning/#protecting-report-metadata" rel="noopener noreferrer"&gt;https://kubescape.io/docs/scanning/#protecting-report-metadata&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Can a Security Report Become a Security Risk?
&lt;/h1&gt;

&lt;p&gt;That question stayed with me throughout this project.&lt;/p&gt;

&lt;p&gt;Security scanners exist to help organizations improve their security posture. They identify vulnerabilities, misconfigurations, exposed secrets, and policy violations. But while working with Kubescape, I realized something interesting.&lt;/p&gt;

&lt;p&gt;The reports themselves often contain sensitive information.&lt;/p&gt;

&lt;p&gt;A typical scan report may include Kubernetes namespaces, workload names, repository metadata, Git information, source file paths, container image names, and other identifiers that reveal details about an organization's infrastructure.&lt;/p&gt;

&lt;p&gt;These reports are frequently shared outside engineering teams—for compliance reviews, customer support, security audits, or even when opening issues in public repositories.&lt;/p&gt;

&lt;p&gt;At that point, I started asking myself a simple question.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can a security report itself become a security concern?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer was yes.&lt;/p&gt;

&lt;p&gt;That question eventually became the starting point for &lt;strong&gt;Report Metadata Protection&lt;/strong&gt;, a feature that shipped with &lt;strong&gt;Kubescape v4.0.11&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This article isn't about how to use the feature. Instead, it's about everything that happened before the feature reached users.&lt;/p&gt;







&lt;h1&gt;
  
  
  The Problem We Were Actually Trying to Solve
&lt;/h1&gt;

&lt;p&gt;When people hear the phrase &lt;strong&gt;"security report,"&lt;/strong&gt; the assumption is that the report itself is safe to share.&lt;/p&gt;

&lt;p&gt;After all, it's the output of a security scanner.&lt;/p&gt;

&lt;p&gt;But while working on Kubescape, I realized something interesting.&lt;/p&gt;

&lt;p&gt;Although the report doesn't expose secrets like passwords or API tokens, it often contains metadata that can reveal a surprising amount about an organization's infrastructure.&lt;/p&gt;

&lt;p&gt;For example, a report may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes namespaces&lt;/li&gt;
&lt;li&gt;Workload and deployment names&lt;/li&gt;
&lt;li&gt;Container image names&lt;/li&gt;
&lt;li&gt;Repository information&lt;/li&gt;
&lt;li&gt;Git metadata&lt;/li&gt;
&lt;li&gt;Source file paths&lt;/li&gt;
&lt;li&gt;Cluster resource names&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Individually, none of these fields are necessarily sensitive.&lt;/p&gt;

&lt;p&gt;Together, however, they paint a detailed picture of an organization's environment.&lt;/p&gt;

&lt;p&gt;Many organizations share scan reports with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security consultants&lt;/li&gt;
&lt;li&gt;Customers&lt;/li&gt;
&lt;li&gt;Compliance auditors&lt;/li&gt;
&lt;li&gt;Open-source maintainers&lt;/li&gt;
&lt;li&gt;Internal teams outside engineering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In those situations, exposing infrastructure metadata may not be acceptable.&lt;/p&gt;

&lt;p&gt;The obvious solution might seem to be removing all of that information.&lt;/p&gt;

&lt;p&gt;Unfortunately, that creates another problem.&lt;/p&gt;

&lt;p&gt;Most security findings reference workloads, namespaces, or resources.&lt;/p&gt;

&lt;p&gt;If those identifiers disappear completely, the report quickly becomes difficult to understand.&lt;/p&gt;

&lt;p&gt;That led us to a fundamental engineering challenge.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How can we protect sensitive metadata without making the report useless?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That single question influenced almost every design decision that followed.&lt;/p&gt;

&lt;p&gt;Instead of asking &lt;em&gt;"How do we hide names?"&lt;/em&gt;, the real question became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do we preserve the usefulness of a security report while protecting the information organizations don't want to expose?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everything else—the anonymization pipeline, encryption support, decryption workflow, and CLI design—was built to answer that question.&lt;/p&gt;




&lt;h1&gt;
  
  
  From One Idea to Two Different Workflows
&lt;/h1&gt;

&lt;p&gt;Initially, I thought there would be a single solution.&lt;/p&gt;

&lt;p&gt;As the design discussions evolved, it became clear that different users had different requirements.&lt;/p&gt;

&lt;p&gt;Some users wanted reports they could safely share without exposing infrastructure names.&lt;/p&gt;

&lt;p&gt;Others needed actual cryptographic protection because reports might travel outside trusted environments.&lt;/p&gt;

&lt;p&gt;Trying to satisfy both requirements with a single implementation would have complicated the user experience.&lt;/p&gt;

&lt;p&gt;Instead, the feature evolved into two complementary workflows.&lt;/p&gt;

&lt;p&gt;The first focuses on &lt;strong&gt;hiding&lt;/strong&gt; sensitive identifiers while preserving the structure of the report.&lt;/p&gt;

&lt;p&gt;The second focuses on &lt;strong&gt;encrypting&lt;/strong&gt; sensitive metadata so that it can later be recovered only by someone who possesses the correct master key.&lt;/p&gt;

&lt;p&gt;Although both workflows aim to protect report metadata, they solve different problems.&lt;/p&gt;

&lt;p&gt;Understanding that distinction became one of the most important design decisions during development.&lt;/p&gt;




&lt;h1&gt;
  
  
  Building the &lt;code&gt;--hide&lt;/code&gt; Workflow
&lt;/h1&gt;

&lt;p&gt;The first capability introduced was the &lt;code&gt;--hide&lt;/code&gt; flag.&lt;/p&gt;

&lt;p&gt;At first glance, replacing names might sound simple.&lt;/p&gt;

&lt;p&gt;It isn't.&lt;/p&gt;

&lt;p&gt;Simply removing values would make reports difficult to understand.&lt;/p&gt;

&lt;p&gt;Imagine every workload name becoming an empty string.&lt;/p&gt;

&lt;p&gt;Relationships between resources would disappear, making debugging much harder.&lt;/p&gt;

&lt;p&gt;Instead, the implementation generates deterministic pseudonyms.&lt;/p&gt;

&lt;p&gt;That means identical values always produce identical replacements.&lt;/p&gt;

&lt;p&gt;For example, if the namespace &lt;code&gt;production&lt;/code&gt; appears in twenty different places inside the report, every occurrence is replaced with the same pseudonym.&lt;/p&gt;

&lt;p&gt;Although the original value is hidden, the relationships remain intact.&lt;/p&gt;

&lt;p&gt;This allows users to understand the report without exposing sensitive infrastructure details.&lt;/p&gt;

&lt;p&gt;This was an important balance between usability and privacy.&lt;/p&gt;

&lt;p&gt;The goal wasn't encryption.&lt;/p&gt;

&lt;p&gt;The goal was making reports safer to share while preserving their usefulness.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why &lt;code&gt;--hide&lt;/code&gt; Wasn't Enough
&lt;/h1&gt;

&lt;p&gt;As discussions continued, another use case became clear.&lt;/p&gt;

&lt;p&gt;Some organizations don't simply want identifiers hidden.&lt;/p&gt;

&lt;p&gt;They need them to remain confidential while still allowing authorized users to recover the original values later.&lt;/p&gt;

&lt;p&gt;That requirement cannot be solved through pseudonymization.&lt;/p&gt;

&lt;p&gt;Once a value has been replaced, there is no secure way to recover the original information.&lt;/p&gt;

&lt;p&gt;This is where encryption became necessary.&lt;/p&gt;

&lt;p&gt;Rather than extending the &lt;code&gt;--hide&lt;/code&gt; implementation beyond its intended purpose, Kubescape introduced a separate workflow dedicated to protecting report metadata through encryption.&lt;/p&gt;

&lt;p&gt;The result was a much cleaner design.&lt;/p&gt;

&lt;p&gt;Each workflow now had a clear responsibility.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--hide&lt;/code&gt; reduces accidental exposure.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--encrypt&lt;/code&gt; provides cryptographic confidentiality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trying to combine both into a single workflow would have made the feature harder to understand and maintain.&lt;/p&gt;

&lt;p&gt;Separating them made both implementations simpler and more intuitive.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Engineering Lesson That Stood Out
&lt;/h1&gt;

&lt;p&gt;Looking back, I don't think the most valuable lesson from this project was learning how to implement anonymization.&lt;/p&gt;

&lt;p&gt;It was learning that software design is about understanding trade-offs.&lt;/p&gt;

&lt;p&gt;There is rarely a single "correct" solution.&lt;/p&gt;

&lt;p&gt;Every design decision introduces compromises.&lt;/p&gt;

&lt;p&gt;Removing metadata makes reports less useful.&lt;/p&gt;

&lt;p&gt;Pseudonymization preserves usability but isn't intended to provide cryptographic protection.&lt;/p&gt;

&lt;p&gt;Encryption protects confidentiality but introduces key management and recovery workflows.&lt;/p&gt;

&lt;p&gt;Choosing between those approaches wasn't just an implementation decision.&lt;/p&gt;

&lt;p&gt;It was a product design decision.&lt;/p&gt;

&lt;p&gt;As contributors, it's easy to jump straight into writing code.&lt;/p&gt;

&lt;p&gt;This project reminded me that the quality of the implementation often depends on the quality of the conversations that happen before implementation even begins.&lt;/p&gt;




&lt;h1&gt;
  
  
  What's Next?
&lt;/h1&gt;

&lt;p&gt;This article focused on the journey from identifying a security problem to designing the overall solution.&lt;/p&gt;

&lt;p&gt;In the next part, I'll dive into the implementation itself, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How the anonymization pipeline was designed&lt;/li&gt;
&lt;li&gt;Why deterministic pseudonyms were chosen&lt;/li&gt;
&lt;li&gt;Integrating the feature into Kubescape's scanning pipeline&lt;/li&gt;
&lt;li&gt;CLI design decisions&lt;/li&gt;
&lt;li&gt;Lessons learned while implementing the feature in Go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually, I'll also write about the encryption architecture, including the Data Encryption Key (DEK), master key management, why the master key never travels with the report, and how &lt;code&gt;kubescape decrypt&lt;/code&gt; restores protected metadata.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This feature taught me much more than how to build anonymization or encryption into a security tool.&lt;/p&gt;

&lt;p&gt;It showed me what building production software in an open-source project really looks like.&lt;/p&gt;

&lt;p&gt;Ideas become discussions.&lt;/p&gt;

&lt;p&gt;Discussions become design decisions.&lt;/p&gt;

&lt;p&gt;Design decisions become implementations.&lt;/p&gt;

&lt;p&gt;Implementations become documentation.&lt;/p&gt;

&lt;p&gt;And finally, after many rounds of review and collaboration, they become features that thousands of users can rely on.&lt;/p&gt;

&lt;p&gt;That journey—from design discussions to production—is what made this project so rewarding.&lt;/p&gt;




&lt;h1&gt;
  
  
  About Me
&lt;/h1&gt;

&lt;p&gt;Hi! I'm &lt;strong&gt;Suman Mandal&lt;/strong&gt; (GitHub: &lt;strong&gt;&lt;a href="https://github.com/jijo-OO7" rel="noopener noreferrer"&gt;@jijo-OO7&lt;/a&gt;&lt;/strong&gt;), an open-source contributor passionate about Kubernetes, cloud-native technologies, and security engineering.&lt;/p&gt;

&lt;p&gt;Through this blog series, I want to share not only the technical details behind the features I build, but also the engineering decisions, design trade-offs, review process, and lessons that aren't always visible in a merged pull request.&lt;/p&gt;

&lt;p&gt;If you're beginning your own open-source journey, I hope my experiences can make yours a little easier.&lt;/p&gt;

&lt;p&gt;You can find me here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐙 GitHub: &lt;a href="https://github.com/jijo-OO7" rel="noopener noreferrer"&gt;https://github.com/jijo-OO7&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading, and I'll see you in the next part, where I'll dive into the implementation of the &lt;code&gt;--hide&lt;/code&gt; workflow and the design decisions behind it.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Bridging the Gap: Converting SPDX 3.0 to 2.3 in the Software Supply Chain</title>
      <dc:creator>Suman Mandal</dc:creator>
      <pubDate>Thu, 16 Apr 2026 07:43:48 +0000</pubDate>
      <link>https://dev.to/jijo-007/bridging-the-gap-converting-spdx-30-to-23-in-the-software-supply-chain-3omc</link>
      <guid>https://dev.to/jijo-007/bridging-the-gap-converting-spdx-30-to-23-in-the-software-supply-chain-3omc</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction: What is SPDX?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the root of modern software supply chain security lies SPDX—short for Software Package Data Exchange.&lt;/p&gt;

&lt;p&gt;At its core, SPDX is a standardized format for describing what’s inside a piece of software.&lt;/p&gt;

&lt;p&gt;Think of it as an ingredients label for software.&lt;/p&gt;

&lt;p&gt;An SPDX document helps answer critical questions such as:&lt;br&gt;
What packages are included?&lt;br&gt;
What files exist?&lt;br&gt;
What licenses apply?&lt;br&gt;
Who created the software?&lt;br&gt;
How do different components relate to each other?&lt;br&gt;
Why SPDX Matters&lt;/p&gt;

&lt;p&gt;In real-world scenarios, when you install something like:&lt;/p&gt;

&lt;p&gt;a Docker image&lt;br&gt;
an npm package&lt;br&gt;
a Linux distribution&lt;/p&gt;

&lt;p&gt;…you are pulling in hundreds (sometimes thousands) of dependencies.&lt;/p&gt;

&lt;p&gt;SPDX provides a structured way to declare:&lt;/p&gt;

&lt;p&gt;“Here’s everything inside this software—legally and technically.”&lt;/p&gt;

&lt;p&gt;This is essential for:&lt;/p&gt;

&lt;p&gt;SBOMs (Software Bill of Materials)&lt;br&gt;
Supply chain security&lt;br&gt;
License compliance&lt;br&gt;
CI/CD automation pipelines&lt;/p&gt;

&lt;p&gt;Major organizations like Google, Microsoft, and Red Hat rely on SPDX or compatible standards internally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Inside an SPDX Document?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An SPDX document typically consists of:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Packages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Includes metadata such as name, version, and supplier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Individual files along with their associated licenses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Relationships&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Defines how components interact, for example:&lt;/p&gt;

&lt;p&gt;“A depends on B”&lt;br&gt;
“A contains B”&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Licenses&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Standard identifiers like MIT, Apache-2.0, GPL, etc.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SPDX Versions: Why This Project Exists&lt;br&gt;
SPDX 2.3 (Target)&lt;br&gt;
Document-based structure&lt;br&gt;
Organized into sections (packages, files, relationships)&lt;br&gt;
Simpler and widely adopted&lt;br&gt;
SPDX 3.0 (Source)&lt;br&gt;
Graph-based model&lt;br&gt;
Modular design (profiles like software, security, AI, etc.)&lt;br&gt;
Far more expressive and flexible&lt;/p&gt;

&lt;p&gt;This shift from a document model → graph model is powerful—but it introduces a major challenge:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backward compatibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Core Problem: Not Transformation, But Controlled Loss&lt;/p&gt;

&lt;p&gt;I’ve been working on contributing to SPDX tooling this summer, specifically focusing on:&lt;/p&gt;

&lt;p&gt;SPDX 3.0 → SPDX 2.3 backward conversion&lt;/p&gt;

&lt;p&gt;At first glance, this might sound like a simple transformation—but it’s not.&lt;/p&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;p&gt;SPDX 3.0 is graph-based&lt;br&gt;
SPDX 2.3 is document-based&lt;/p&gt;

&lt;p&gt;Not all information in 3.0 can be represented in 2.3.&lt;/p&gt;

&lt;p&gt;So the goal is not a perfect transformation.&lt;/p&gt;

&lt;p&gt;Instead, the real objective is:&lt;/p&gt;

&lt;p&gt;Controlled loss of information&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;p&gt;Preserving what can be represented in 2.3&lt;br&gt;
Gracefully handling what cannot&lt;br&gt;
Ensuring no critical data is silently lost&lt;br&gt;
Why This Matters for End Users&lt;/p&gt;

&lt;p&gt;While SPDX 3.0 is the future, many existing systems still rely on SPDX 2.3.&lt;/p&gt;

&lt;p&gt;A backward conversion enables:&lt;/p&gt;

&lt;p&gt;Compatibility with legacy tooling&lt;br&gt;
Gradual migration to SPDX 3.0&lt;br&gt;
Continued support for existing compliance systems&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;/p&gt;

&lt;p&gt;It allows ecosystems to adopt SPDX 3.0 without breaking what already works.&lt;/p&gt;

&lt;p&gt;Where tools-golang Fits In&lt;/p&gt;

&lt;p&gt;The tools-golang project provides Go-based utilities for working with SPDX documents.&lt;/p&gt;

&lt;p&gt;It is commonly used to:&lt;/p&gt;

&lt;p&gt;Parse SPDX files&lt;br&gt;
Generate SPDX outputs&lt;br&gt;
Validate document structure&lt;/p&gt;

&lt;p&gt;However:&lt;/p&gt;

&lt;p&gt;It primarily supports SPDX 2.x&lt;br&gt;
It does not fully support SPDX 3.0 yet&lt;/p&gt;

&lt;p&gt;This makes it a natural fit for:&lt;/p&gt;

&lt;p&gt;Generating valid SPDX 2.3 output after conversion&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The evolution from SPDX 2.3 → 3.0 represents a major leap in how we model software systems—from static documents to rich, interconnected graphs.&lt;/p&gt;

&lt;p&gt;But with that progress comes a practical challenge: ensuring backward compatibility.&lt;/p&gt;

&lt;p&gt;The work on SPDX 3.0 → 2.3 conversion sits right at this intersection.&lt;/p&gt;

&lt;p&gt;It’s not about perfect translation—it’s about:&lt;/p&gt;

&lt;p&gt;Making thoughtful trade-offs&lt;br&gt;
Preserving essential information&lt;br&gt;
Enabling real-world adoption&lt;/p&gt;

&lt;p&gt;As the software supply chain ecosystem continues to evolve, solutions like this will play a key role in bridging the gap between where we are and where we’re going.&lt;/p&gt;

</description>
      <category>security</category>
      <category>supplychain</category>
    </item>
  </channel>
</rss>
