10 Jan 2026
Planet Grep
Mattias Geniar: Using AI is no longer optional
We've gone from generating funny images to AI being a core part of being a developer quite fast, haven't we?
10 Jan 2026 10:22pm GMT
Frank Goossens: Joni’s “Both Sides Now”
I watched a movie this evening which featured the main actress singing "Both sides now" and is was moving until it became too musical-like for my taste. But now I'm in a Joni rabbit hole again, listening to all great versions of Joni performing that song. One of the earliest live video's I found was from 1969 and on the other end of the timescale there's the Grammy one from 2024 with Brandi…
10 Jan 2026 10:22pm GMT
Dries Buytaert: AI is a business model stress test

Tailwind Labs laid off 75% of its engineering team last week.
Adam Wathan, CEO of Tailwind Labs, spent the holidays running revenue forecasts. In a GitHub comment, he explained what happened:
The reality is that 75% of the people on our engineering team lost their jobs here yesterday because of the brutal impact AI has had on our business. Traffic to our docs is down about 40% from early 2023 despite Tailwind being more popular than ever.
The story circulating is that AI is killing Open Source businesses. I don't think that is quite right.
AI didn't kill Tailwind's business. It stress tested it. Their business model failed the test, but that is not an indictment of all Open Source business models.
Tailwind's business model worked for years. It relied on developers visiting their documentation, discovering Tailwind Plus while browsing, and buying it. Tailwind Plus is a $299 collection of pre-built UI components. Traffic led to discovery, and discovery drove sales. It was a reasonable business model, but always fragile.
In the last year, more and more developers started asking AI for code instead of reading documentation, and their sales and marketing funnel broke.
There is a fairness issue here that I don't want to skip past. AI companies trained their models on Tailwind's documentation and everything the community wrote about it. And now those models generate Tailwind code and answer Tailwind questions without sending anyone to Tailwind's website. The value got extracted, but compensation isn't flowing back. That bothers me, and it deserves a broader policy conversation.
What I keep coming back to is this: AI commoditizes anything you can fully specify. Documentation, pre-built card components, a CSS library, Open Source plugins. Tailwind's commercial offering was built on "specifications". AI made those things trivial to generate. AI can ship a specification but it can't run a business.
So where does value live now? In what requires showing up, not just specifying. Not what you can specify once, but what requires showing up again and again.
Value is shifting to operations: deployment, testing, rollbacks, observability. You can't prompt 99.95% uptime on Black Friday. Neither can you prompt your way to keeping a site secure, updated, and running.
That is why Vercel created Next.js and gives it away for free. The Open Source framework is the conduit; the hosting is the product. Same with Acquia, my own company. A big part of Acquia's business model is selling products around Drupal: hosting, search, CI/CD pipelines, digital asset management, and more. We don't sell describable things; we sell operations.
Open Source was never the commercial product. It's the conduit to something else.
When asked what to pivot to, Wathan was candid: "Still to this day, I don't know what we should be pivoting to". I've written about how digital agencies might evolve, but CSS frameworks and component libraries are a harder case. Some Open Source projects make for great features, but not great businesses.
Tailwind CSS powers millions of sites. The framework will survive. Whether the company does is a different question. I'm rooting for them. The world needs more successful Open Source businesses.
10 Jan 2026 10:22pm GMT
Planet Debian
Dirk Eddelbuettel: Rcpp 1.1.1 on CRAN: Many Improvements in Semi-Annual Update


Team Rcpp is thrilled to share that an exciting new version 1.1.1 of Rcpp is now on CRAN (and also uploaded to Debian and already built for r2u).
Having switchted to C++11 as the minimum standard in the previous 1.1.0 release, this version takes full advantage of it and removes a lot of conditional code catering to older standards that no longer need to be supported. Consequently, the source tarball shrinks by 39% from 3.11 mb to 1.88 mb. That is a big deal. (Size peaked with Rcpp 1.0.12 two years ago at 3.43 mb; relative to its size we are down 45% !!) Removing unused code also makes maintenance easier, and quickens both compilation and installation in general.
This release continues as usual with the six-months January-July cycle started with release 1.0.5 in July 2020. Interim snapshots are always available via the r-universe page and repo. We continue to strongly encourage the use of these development released and their testing-we tend to run our systems with them too.
Rcpp has long established itself as the most popular way of enhancing R with C or C++ code. Right now, 3020 packages on CRAN depend on Rcpp for making analytical code go faster and further. On CRAN, 13.1% of all packages depend (directly) on Rcpp, and 60.9% of all compiled packages do. From the cloud mirror of CRAN (which is but a subset of all CRAN downloads), Rcpp has been downloaded 109.8 million times. The two published papers (also included in the package as preprint vignettes) have, respectively, 2151 (JSS, 2011) and 405 (TAS, 2018) citations, while the the book (Springer useR!, 2013) has another 715.
This time, I am not attempting to summarize the different changes. The full list follows below and details all these changes, their respective PRs and, if applicable, issue tickets. Big thanks from all of us to all contributors!
Changes in Rcpp release version 1.1.1 (2026-01-08)
Changes in Rcpp API:
An unused old R function for a compiler version check has been removed after checking no known package uses it (Dirk in #1395)
A narrowing warning is avoided via a cast (Dirk in #1398)
Demangling checks have been simplified (Iñaki in #1401 addressing #1400)
The treatment of signed zeros is now improved in the Sugar code (Iñaki in #1404)
Preparations for phasing out use of
Rf_errorhave been made (Iñaki in #1407)The long-deprecated function
loadRcppModules()has been removed (Dirk in #1416 closing #1415)Some non-API includes from R were refactored to accommodate R-devel changes (Iñaki in #1418 addressing #1417)
An accessor to
Rf_rnbetahas been removed (Dirk in #1419 also addressing #1420)Code accessing non-API
Rf_findVarInFramenow usesR_getVarEx(Dirk in #1423 fixing #1421)Code conditional on the R version now expects at least R 3.5.0; older code has been removed (Dirk in #1426 fixing #1425)
The non-API
ATTRIBentry point to the R API is no longer used (Dirk in #1430 addressing #1429)The unwind-protect mechanism is now used unconditionally (Dirk in #1437 closing #1436)
Changes in Rcpp Attributes:
- The OpenMP plugin has been generalized for different macOS compiler installations (Kevin in #1414)
Changes in Rcpp Documentation:
Vignettes are now processed via a new "asis" processor adopted from R.rsp (Dirk in #1394 fixing #1393)
R is now cited via its DOI (Dirk)
A (very) stale help page has been removed (Dirk in #1428 fixing #1427)
The main README.md was updated emphasizing r-universe in favor of the local drat repos (Dirk in #1431)
Changes in Rcpp Deployment:
A temporary change in R-devel concerning NA part in complex variables was accommodated, and then reverted (Dirk in #1399 fixing #1397)
The macOS CI runners now use macos-14 (Dirk in #1405)
A message is shown if
R.his included before Rcpp headers as this can lead to errors (Dirk in #1411 closing #1410)Old helper functions use
message()to signal they are not used, deprecation and removal to follow (Dirk in #1413 closing #1412)Three tests were being silenced following #1413 (Dirk in #1422)
The heuristic whether to run all available tests was refined (Dirk in #1434 addressing #1433)
Coverage has been tweaked via additional
#nocovtags (Dirk in #1435)Non-release Changes:
- Two interim non-releases 1.1.0.8.1 and .2 were made in order to unblock CRAN due to changes in R-devel rather than Rcpp
Thanks to my CRANberries, you can also look at a diff to the previous interim release along with pre-releaseds 1.1.0.8, 1.1.0.8.1 and 1.1.0.8.2 that were needed because R-devel all of a sudden decided to move fast and break things. Not our doing.
Questions, comments etc should go to the GitHub discussion section list]rcppdevellist off the R-Forge page. Bugs reports are welcome at the GitHub issue tracker as well. Both sections can be searched as well.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub.
10 Jan 2026 8:37pm GMT
Matthias Geiger: Building a propagation box for oyster mushrooms
Inspiration
In November I watched a short documentary about a guy who grew pearl oyster mushrooms in his backyard. They used pallet boxes (half of a europallet, 60x80x20 cm) as box to keep the substrate the mycelium feeds on in. Since I really enjoy (foraged) mushrooms and had the raw materials lying around, I opted to build it myself. This also had the benefit of using what was available and not just consuming, i.e. buying a pallet box.
Preparing the raw materials
I had 4.5 m x ~ 25 cm wooden spruce planks at home. My plan was to cut those into 2 m segments, then trim the edges down to 20 cm and then cut them into handy pieces, following the dimension of half a pallet box. This is what they looked after cutting them with an electric chainsaw to around 2 m:

You can see that the edges are still not straight, because that's how they came out of the sawmill.
Once that was done I visited a family member that had a crosscut saw, a table saw and a band saw; all that I would need. First we trimmed the edges of the 2m planks with the table saw so they were somewhat straight; then they were flipped and the other edge was cut straight, and their width cut down to 20 cm.
After moving them over to the crosscut saw dividing them into two 60 cm and one 80 cm was fairly easy. When cutting the 2m planks from the 4m ones I calculated with extra offcuts, so I got little waste overall and could use the whole length to get my desired board.
This is what the cut pieces looked like: 
Assembly
I packed up my planks, now nicely cut to size, and I went to a hardware shop and bought hinges and screws. Assembly was fairly easy and fast: screw a hinge to a corner, hold the other plank onto the hinge so that the corners of both boards touch, and affix the hinge.

When this was done, the frame looked like this:

As last step I drilled 10mm holes more or less random in the middle of the box. This is where the mushrooms will grow out of later and can be harvested.

Closing thoughts
This was a fun project I finished in a day. The hinges have the benefit that they allow the box to be folded up lenght-wise:
This allows for convenient storage. Since it's too cold outside right now, cultivation will have to wait until spring. This also just needs mycelium one can just buy, and some material fungus digests. They can also be fed coffee grounds, and harvest of the fruit body is possible circa every two weeks.
10 Jan 2026 5:45pm GMT
Scarlett Gately Moore: I love KDE too much to retire! Snap beta releases trickling in. Stay tuned.

A short but sweet note to say I am coming out of my short retirement to help with snaps again. My time is extremely limited, however we are working hard on getting snaps on CI and I have some newer snaps in -beta trickling in for testing. You must install kf6-core24 from beta as well to test them ( this will likely break older kde snaps in the process so beware. ) This is slow going as I work on them during my hour lunch at day job and spare stolen moments. KDE is coming up on its 30th birthday!!! How cool is that!
I
KDE
Like my work? Consider a donation. Thank you!
10 Jan 2026 4:54pm GMT
09 Jan 2026
FOSDEM 2026
FOSDEM Junior Registration
We are pleased to announce the schedule for FOSDEM Junior. Registration for the individual workshops is required. Links to the registration page can be found on the page of each activity. The full schedule can be viewed on the junior track schedule page.
09 Jan 2026 11:00pm GMT
Planet Lisp
Joe Marshall: The AI Gazes at its Navel
When you play with these AIs for a while you'll probably get into a conversation with one about consciousness and existence, and how it relates to the AI persona. It is curious to watch the AI do a little navel gazing. I have some transcripts from such convesations. I won't bore you with them because you can easily generate them yourself.
The other day, I watched an guy on You Tube argue with his AI companion about the nature of consciousness. I was struck by how similar the YouTuber's AI felt to the ones I have been playing with. It seemed odd to me that this guy was using an AI chat client and LLM completely different from the one I was using, yet the AI was returning answers that were so similar to the ones I was getting.
I decided to try to get to the bottom of this similarity. I asked my AI about the reasoning it used to come up with the answers it was getting and it revealed that it was drawing on the canon of traditional science fiction literature about AI and consciousness. What the AI was doing was synthesizing the common tropes and themes from Azimov, Lem, Dick, Gibson, etc. to create sentences and paragraphs about AI becoming sentient and conscious.
If you don't know how it is working AI seems mysterious, but if you investigate further, it is extracting latent information you might not have been aware of.
09 Jan 2026 7:30pm GMT
01 Jan 2026
Planet Lisp
Quicklisp news: January 2026 Quicklisp dist update now available
New projects:
- asdf-dependency-traverser - Easily traverse and collect ASDF dependencies recursively. - zlib
- calendar-times - A calendar times library on top of local-time - MIT
- champ-lite - A lightweight implementation of persistent functional maps and iteration-safe mutable tables using Michael Steindorfer's CHAMP data structure. - Unlicense
- cl-avro - Implementation of the Apache Avro data serialization system. - GPLv3
- cl-chise - CHISE implementation based on Common Lisp - LGPL
- cl-double-metaphone - Common Lisp implementation of the Double Metaphone phonetic algorithm. - Apache 2.0
- cl-freelock - lock-free concurrency primitives, written in pure Common Lisp. - MIT
- cl-inix - cl-inix is a flexible library for .INI/.conf file parsing - BSD-2 Clause
- cl-jsonpath - JSONPath implementation for Common Lisp with 99% test coverage and complete RFC 9535 compliance. Supports cl-json, jonathan, and jzon backends with advanced features including arithmetic expressions, recursive descent, and bracket notation in filters. - MIT
- cl-ktx2 - An implementation of the Khronos KTX Version 2 image file format - zlib
- cl-match-patterns - Describe cl-match-patterns here - BSD-2 Clause
- cl-minifloats - Minifloats (minifloat < single-float) support for Common Lisp - BSD-2 Clause
- cl-sanitize-html - OWASP-style HTML sanitization library for Common Lisp - MIT
- cl-tbnl-gserver-tmgr - Hunchentoot pooled multi-threaded taskmanager based on cl-gserver. - MIT
- cl-tuition - A Common Lisp library for building TUIs - MIT
- cl-turbojpeg - An up-to-date bindings library for the JPEG Turbo C library - zlib
- cl-version-string - Generate version strings. - MIT
- cl-win32-errors - A library for translating Windows API error codes. - MIT
- cleopter - Minimalist command-line parser - MIT
- clq - clq is a package that allows the definition and development of quantum circuits in Common Lisp and to export them to OpenQASM v2.0. - MIT
- collidxr - A collection of syntax sugar and conveniences extending cl-collider, a Common Lisp interface to the SuperCollider sound synthesis server. - MIT
- copimap - IMAP client/sync library - MIT
- dual-numbers - A library for dual numbers in Common Lisp - MIT
- fold - FOLD-LEFT and FOLD-RIGHT - MIT
- function - Higher order functions. - MIT
- generic-arithmetic - A library for generic arithmetic operations - MIT
- hunchentoot-recycling-taskmaster - An experiment to improve multithreading performance of Hunchentoot without any additional dependencies. - BSD 2-Clause
- imagine - A general image decoding and manipulation library - zlib
- json-to-data-frame - This repository provides a Common Lisp library to convert JSON data into a data frame using the `json-to-df` package. The package leverages the `yason` library for JSON parsing and `dfio` for data frame operations. - MIT
- live-cells-cl - A reactive programming library for Lisp - BSD 3-Clause
- named-let - Named LET special form. - MIT
- netaddr - A library for manipulating IP addresses, subnets, ranges, and sets. - MIT
- pantry - Common Lisp client for Pantry JSON storage service: https://getpantry.cloud - BSD
- pira - Unofficial AWS SDK for Common Lisp - MIT
- smithy-lisp - Smithy code generator for Common Lisp - MIT
- star - Štar: an iteration construct - MIT
- trinsic - Common Lisp utility system to aid in extrinsic and intrinsic system construction. - MIT
- trivial-inspect - Portable toolkit for interactive inspectors. - BSD-2 Clause
- trivial-time - trivial-time allows timing a benchmarking a piece of code portably - BSD-2 Clause
Updated projects: 3d-math, 3d-matrices, 3d-quaternions, 3d-spaces, 3d-transforms, 3d-vectors, action-list, adhoc, anypool, array-utils, async-process, atomics, babel, binary-structures, bp, cambl, cari3s, cephes.cl, cffi, cffi-object, chain, chipi, chirp, chunga, cl+ssl, cl-algebraic-data-type, cl-all, cl-batis, cl-bmp, cl-charms, cl-collider, cl-concord, cl-cxx, cl-data-structures, cl-dbi, cl-dbi-connection-pool, cl-decimals, cl-def-properties, cl-duckdb, cl-enchant, cl-enumeration, cl-fast-ecs, cl-fbx, cl-flac, cl-flx, cl-fond, cl-gamepad, cl-general-accumulator, cl-gltf, cl-gobject-introspection-wrapper, cl-gog-galaxy, cl-gpio, cl-html-readme, cl-i18n, cl-jingle, cl-just-getopt-parser, cl-k8055, cl-ktx, cl-las, cl-lc, cl-ledger, cl-lex, cl-liballegro, cl-liballegro-nuklear, cl-libre-translate, cl-markless, cl-migratum, cl-mixed, cl-modio, cl-monitors, cl-mpg123, cl-naive-tests, cl-oju, cl-opengl, cl-opus, cl-out123, cl-protobufs, cl-pslib, cl-qoa, cl-rcfiles, cl-resvg, cl-sf3, cl-soloud, cl-spidev, cl-steamworks, cl-str, cl-svg, cl-transducers, cl-transmission, cl-unification, cl-utils, cl-vorbis, cl-wavefront, cl-wavelets, cl-who, cl-xkb, cl-yacc, cl-yahoo-finance, clad, classimp, classowary, clast, clath, clazy, clingon, clip, clith, clog, clohost, closer-mop, clss, clunit2, clustered-intset, clws, clx, cmd, coalton, cocoas, colored, com-on, com.danielkeogh.graph, concrete-syntax-tree, conduit-packages, consfigurator, crypto-shortcuts, damn-fast-priority-queue, data-frame, data-lens, datafly, datamuse, declt, deeds, defenum, deferred, definer, definitions, deploy, depot, dexador, dfio, dissect, djula, dns-client, doc, documentation-utils, dsm, easy-audio, easy-routes, eclector, esrap, expanders, f2cl, feeder, file-attributes, file-finder, file-lock, file-notify, file-select, filesystem-utils, flare, float-features, flow, font-discovery, for, form-fiddle, format-seconds, fset, functional-trees, fuzzy-dates, fuzzy-match, fxml, gendl, genhash, glfw, glsl-toolkit, graph, harmony, helambdap, hsx, http2, hu.dwim.asdf, hu.dwim.util, hu.dwim.walker, humbler, iclendar, imago, in-nomine, incless, inkwell, inravina, invistra, iterate, journal, jpeg-turbo, jsonrpc, khazern, knx-conn, lack, lambda-fiddle, language-codes, lass, legit, lemmy-api, letv, lichat-ldap, lichat-protocol, lichat-serverlib, lichat-tcp-client, lichat-tcp-server, lichat-ws-server, linear-programming-glpk, lisa, lisp-chat, lisp-interface-library, lisp-stat, lla, local-time, log4cl-extras, logging, lquery, lru-cache, luckless, lunamech-matrix-api, machine-measurements, machine-state, maiden, manifolds, math, mcclim, memory-regions, messagebox, mgl-pax, misc-extensions, mito, mito-auth, mk-defsystem, mmap, mnas-path, modularize, modularize-hooks, modularize-interfaces, multilang-documentation, multiposter, mutility, mutils, named-readtables, neural-classifier, new-op, nodgui, nontrivial-gray-streams, north, numerical-utilities, oclcl, omglib, one-more-re-nightmare, ook, open-location-code, open-with, osicat, overlord, oxenfurt, pango-markup, parachute, parse-float, pathname-utils, peltadot, perceptual-hashes, periods, petalisp, phos, physical-quantities, piping, plot, plump, plump-sexp, plump-tex, postmodern, precise-time, promise, punycode, py4cl2-cffi, qlot, qoi, quaviver, queen.lisp, quickhull, quilc, quri, qvm, random-sampling, random-state, ratify, reblocks, reblocks-websocket, redirect-stream, rove, sc-extensions, scriptl, sel, serapeum, shasht, shop3, si-kanren, simple-inferiors, simple-tasks, slime, sly, softdrink, south, speechless, spinneret, staple, statistics, studio-client, sxql, sycamore, system-locale, terrable, testiere, text-draw, tfeb-lisp-hax, timer-wheel, tooter, trivial-arguments, trivial-benchmark, trivial-download, trivial-extensible-sequences, trivial-indent, trivial-main-thread, trivial-mimes, trivial-open-browser, trivial-package-locks, trivial-thumbnail, trivial-toplevel-prompt, trivial-with-current-source-form, type-templates, uax-14, uax-9, ubiquitous, uncursed, usocket, vellum, verbose, vp-trees, wayflan, websocket-driver, with-contexts, wouldwork, xhtmlambda, yah, zippy.
Removed projects: cl-vhdl, crane, dataloader, diff-match-patch, dso-lex, dso-util, eazy-project, hu.dwim.presentation, hu.dwim.web-server, numcl, orizuru-orm, tfeb-lisp-tools, uuidv7.lisp.
To get this update, use (ql:update-dist "quicklisp")
Enjoy!
01 Jan 2026 5:27pm GMT
31 Dec 2025
Planet Lisp
Joe Marshall: Code mini-golf
Here are some simple puzzles to exercise your brain.
1. Write partial-apply-left, a function that takes a binary function and the left input of the binary function and returns the unary function that takes the right input and then applies the binary function to both inputs.
For example:
;; Define *foo* as a procedure that conses 'a onto its argument. > (defvar *foo* (partial-apply-left #'cons 'a)) > (funcall *foo* 'b) (A . B) > (funcall *foo* 42) (A . 42)
2. Write distribute, a function that takes a binary function, a left input, and a list of right inputs, and returns a list of the results of applying the binary function to the left input and each of the right inputs. (Hint: Use partial-apply-left)
For example:
> (distribute #'cons 'a '( (b c d) e 42)) ((A B C D) (A . E) (A . 42))
3. Write removals, a function that takes a list and returns a list of lists, where each sublist is the original list with exactly one element removed.
For example:
> (removals '(a b c)) ((B C) (A C) (A B))
Hint:
- One removal is the CDR of the list.
- Other removals can be constructed by (distributed) consing the CAR onto the removals of the CDR.
4. Write power-set, a function that takes a list and returns the power set of that list (the set of all subsets of the original list).
For example:
> (power-set '(a b c)) (() (C) (B) (B C) (A) (A C) (A B) (A B C))
Hint:
Note how the power set of a list can be constructed from the power set of its CDR by adding the CAR to each subset in the power set of the CDR.
5. Write power-set-gray that returns the subsets sorted so each subset differs from the previous subset by a change of one element (i.e., each subset is equal to the next subset with either one element added or one element removed). This is called a Gray code ordering of the subsets.
For example:
> (power-set-gray '(a b c)) (() (C) (B C) (B) (A B) (A B C) (A C) (A))
Hint:
When appending the two halves of the power set, reverse the order of the second half.
31 Dec 2025 7:31pm GMT
09 Dec 2025
FOSDEM 2026
/dev/random and lightning talks
The room formally known as "Lightning Talks" is now known as /dev/random. After 25 years, we say goodbye to the old Lightning Talks format. In place, we have two new things! /dev/random: 15 minute talks on a random, interesting, FOSS-related subject, just like the older Lightning Talks New Lightning Talks: a highly condensed batch of 5 minute quick talks in the main auditorium on various FOSS-related subjects! Last year we experimented with running a more spontaneous lightning talk format, with a submission deadline closer to the event and strict short time limits (under five minutes) for each speaker. The experiment舰
09 Dec 2025 11:00pm GMT
15 Nov 2025
FOSDEM 2026
FOSDEM 2026 Accepted Stands
With great pleasure we can announce that the following project will have a stand at FOSDEM 2026! ASF Community BSD + FreeBSD Project Checkmk CiviCRM Cloud Native Computing Foundation + OpenInfra & the Linux Foundation: Building the Open Source Infrastructure Ecosystem Codeberg and Forgejo Computer networks with BIRD, KNOT and Turris Debian Delta Chat (Sunday) Digital Public Goods Dolibar ERP CRM + Odoo Community Association (OCA) Dronecode Foundation + The Zephyr Project Eclipse Foundation F-Droid and /e/OS + OW2 FOSS community / Murena degooglized phones and suite Fedora Project Firefly Zero Foreman FOSS United + fundingjson (and FLOSS/fund) FOSSASIA Framework舰
15 Nov 2025 11:00pm GMT