Compare commits

...

7 Commits

Author SHA1 Message Date
de0c9f5e01 feat: add mastodon link
All checks were successful
Website build and deploy / build (push) Successful in 50s
2026-04-01 11:51:11 +02:00
c9d37811aa chore: shorten summary for podcast
All checks were successful
Website build and deploy / build (push) Successful in 53s
2026-04-01 11:49:20 +02:00
83b7c5f3bd Merge pull request 'Fix broken links, add linkcheck to CI' (#16) from fix-links into main
All checks were successful
Website build and deploy / build (push) Successful in 51s
Reviewed-on: #16
2026-04-01 11:45:58 +02:00
9319d42aca fix: broken links, add check to CI
All checks were successful
Website build and deploy / build (pull_request) Successful in 42s
2026-04-01 11:44:44 +02:00
9bb7fcc300 feat: add link check, enable clever link rendering
All checks were successful
Website build and deploy / build (push) Successful in 1m22s
2026-04-01 11:12:12 +02:00
d3f55b81af feat: add FOSS Backstage talk and GNU/LInux.ch podcast 2026-04-01 11:11:39 +02:00
ad7435e9fb chore: fix link 2026-04-01 10:38:21 +02:00
9 changed files with 107 additions and 5 deletions

View File

@@ -46,11 +46,19 @@ jobs:
sed -i "s|__PROXY_URL__|${{ secrets.MATOMO_PROXY_URL }}|" static/config.php sed -i "s|__PROXY_URL__|${{ secrets.MATOMO_PROXY_URL }}|" static/config.php
sed -i "s|__TOKEN_AUTH__|${{ secrets.MATOMO_TOKEN_AUTH }}|" static/config.php sed -i "s|__TOKEN_AUTH__|${{ secrets.MATOMO_TOKEN_AUTH }}|" static/config.php
- name: Check for broken links
run: |
if [ "${{ gitea.ref }}" = "refs/heads/main" ]; then
mise linkcheck --offline || true
else
mise linkcheck --offline
fi
- name: Build website with Hugo - name: Build website with Hugo
run: hugo run: mise run build
- name: Copy website to host - name: Copy website to host
uses: https://github.com/appleboy/scp-action@v1.0.0 uses: https://github.com/appleboy/scp-action@ff85246acaad7bdce478db94a363cd2bf7c90345 # v1.0.0
with: with:
host: mehl.mx host: mehl.mx
username: maxmehl username: maxmehl

View File

@@ -12,6 +12,9 @@ summaryLength = 50
leftDoubleQuote = '“' leftDoubleQuote = '“'
rightDoubleQuote = '”' rightDoubleQuote = '”'
[markup.goldmark.renderHooks.link]
useEmbedded = "fallback"
[permalinks] [permalinks]
blog = "/blog/:year/:slug" blog = "/blog/:year/:slug"

View File

@@ -53,4 +53,4 @@ Any further questions? Do not hesitate [to ask me][3]!
[1]: /2015/naechste-station-tansania [1]: /2015/naechste-station-tansania
[2]: /uploads/tanzania-map.png [2]: /uploads/tanzania-map.png
[3]: //max.mehl.mx/contact [3]: /contact

View File

@@ -0,0 +1,30 @@
---
title: "Getting Real with the Supply Chain: From SBOM Data to Action"
date: 2026-03-17
categories:
# Language
- english
# - deutsch
- presentation
# - podcast
# - article
tags:
- OSPO
- SupplyChain
- DeutscheBahn
headerimage:
src: max-cornelius-stage.jpg
alt: Cornelius Schumacher and Max Mehl giving the presentation at FOSS Backstage 2026. It's a total view of the auditorium from the back, with the two speakers on stage and the final slide in the background.
# summary: Visible on the listing page, but not on the article page
video: https://www.youtube.com/watch?v=M8wYRRCWaQU
slides: https://up.mehl.mx/slides/2026-03-17-foss-backstage-supply-chain.pdf
event:
name: FOSS Backstage 2026
href: https://26.foss-backstage.de/session/getting-real-with-the-supply-chain-from-sbom-data-to-action/
---
At DB, we handle 100,000+ SBOMs per day. For our small, virtual Open Source Program Office (OSPO), the challenge is not to get lost in the data, but to cut through the jungle and identify real risks. Together with my OSPO colleague Cornelius Schumacher, I presented this challenge at the FOSS Backstage conference in Berlin. We explained how we gather data, generate insights, and take action.
This talk was partly inspired by my earlier FOSDEM talks ([here](/blog/2026-01-fosdem-supply-chain-strategy) and [there](/blog/2026-02-fosdem-sbom-collection)), where I focused on DB's SBOM program and its tools. In this presentation, however, we highlighted what can be learned from it for professional Open Source management.
One topic stood out throughout the presentation: the need for an OSPO to balance between people, value, and risk. None of these should dominate, even though governance functions often tend to focus on risk. Instead, Cornelius and I advocated for a risk-based approach to managing Open Source.

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 KiB

View File

@@ -0,0 +1,28 @@
---
title: "Software-Lieferketten bei der Deutschen Bahn"
date: 2026-03-25
categories:
- deutsch
- podcast
tags:
- Community
- DeutscheBahn
- SupplyChain
summary: Ich wurde mal wieder von Ralf Hersel zum “Captain its Wednesday” Podcast von GNU/Linux.ch eingeladen, um über Software-Lieferketten bei der Deutschen Bahn zu sprechen. Anlass waren meine jüngsten Vorträge auf der FOSS Backstage und der FOSDEM, in denen ich über die Herausforderungen und Chancen von Software-Lieferketten bei der DB gesprochen habe.
headerimage:
src: ciw.jpg
alt: The famous "Captain it's Wednesday" comic
processes:
- fill 1000x440 center webp
audio: https://gnulinux.ch/podcast/CIW175.mp3
event:
name: Captain it's Wednesday Podcast
href: https://gnulinux.ch/ciw175-podcast
mastodon_toot_url: https://mastodon.social/@mxmehl/116318946107759692
---
Ich wurde mal wieder von Ralf Hersel zum "Captain it's Wednesday" Podcast von GNU/Linux.ch eingeladen, um über Software-Lieferketten bei der Deutschen Bahn zu sprechen. Anlass waren meine jüngsten Vorträge auf der [FOSS Backstage](/blog/2026-03-foss-backstage-getting-real-supply-chain) und der [FOSDEM](/blog/2026-01-fosdem-supply-chain-strategy), in denen ich über die Herausforderungen und Chancen von Software-Lieferketten bei der DB gesprochen habe.
Mit Ralf habe ich mal ganz vorne angefangen: was ist eine Software-Lieferkette überhaupt, warum ist sie wichtig, und wie sieht sie bei einem großen Unternehmen wie der Deutschen Bahn aus, und was haben diese SBOMs damit zu tun? Wir haben über die enormen Mengen an Software-Komponenten gesprochen, die täglich bei der DB verarbeitet werden, und wie wir versuchen, den Überblick zu behalten und Risiken zu managen. Dabei ging es auch um die Rolle von Freier und Open Source in der Lieferkette und wie wir dabei mit der Community zusammenarbeiten.
Nach exakt 37 Minuten war das Gespräch auch schon wieder vorbei und natürlich konnten wir nicht in jedes Detail eintauchen. Aber ich hoffe, es war dennoch ein interessanter Einblick für die Zuhörenden.

View File

@@ -1,2 +1,33 @@
[tools] [tools]
hugo-extended = "0.157.0" hugo-extended = "0.159.1"
lychee = "latest"
[vars]
build_dir = "public"
[tasks.cleanup]
description = "Clean up the build destination directory"
run = "rm -r {{vars.build_dir}} || true"
[tasks.build]
depends = ["cleanup"]
description = "Build the static site using Hugo"
run = "hugo -d {{vars.build_dir}}"
[tasks.preview]
depends = ["cleanup"]
description = "Preview the site locally using Hugo's built-in server"
run = "hugo server"
[tasks.linkcheck]
depends = ["build"]
description = "Check for broken links using lychee"
run = '''
lychee \
--max-concurrency 5 --cache --max-cache-age 1h \
--index-files 'index.html' \
--root-dir {{vars.build_dir}}/ \
-u 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Apple WebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36' \
--exclude 'glyphicons-halflings-regular\.(eot|woff|woff2|ttf|svg)' \
{{vars.build_dir}}/
'''

View File

@@ -65,7 +65,9 @@
</div> </div>
<div class="col-xs-9 col-md-10"> <div class="col-xs-9 col-md-10">
{{ if $selection }} {{ if $selection }}
<span class="article-rss"><a class="label label-rss" href="/{{ .Data.Plural }}/{{lower .Title}}/index.xml" title="RSS Feed"><i class="fa fa-rss" aria-hidden="true"></i> Subscribe to »{{.Title}}«</a></span> {{- with .OutputFormats.Get "RSS" -}}
<span class="article-rss"><a class="label label-rss" href="{{ .Permalink }}" title="RSS Feed"><i class="fa fa-rss" aria-hidden="true"></i> Subscribe to »{{ $.Title }}«</a></span>
{{- end -}}
{{ else }} {{ else }}
<span class="article-rss"><a class="label label-rss" href="/blog/index.xml" title="RSS Feed"><i class="fa fa-rss" aria-hidden="true"></i> Subscribe to all posts</a></span> <span class="article-rss"><a class="label label-rss" href="/blog/index.xml" title="RSS Feed"><i class="fa fa-rss" aria-hidden="true"></i> Subscribe to all posts</a></span>
{{ end }} {{ end }}