IRC channel logs

2026-01-25.log

back to list of logs

<ArneBab>I updated my "is guile fast?" page with the new benchmark data and anchor Guile and Chez in the benchmarksgame: https://www.draketo.de/software/guile-fast#other-languages ← Chez is roughly factor 7 slower than C, Guile roughly factor 18 (Racket at 12, Java at 3.5, Ruby and Python at 60 and 70)
<ekaitz>oh lord
<ekaitz>7 is very fast
<ekaitz>and guile is also very fast!
<graywolf>I wonder whether the fact that (assq-ref #f 'foo) is #f is something I can rely upon
<ArneBab>ekaitz: yes
<ArneBab>ekaitz: though do keep in mind that if people put more work into optimizing the racket code in the benchmarksgame, this would likely look even faster
<johnwcowan>r6 and r7 coth require equal? to work correctly on circular data structures
<johnwcowan>The equal? procedure, when applied to pairs, vectors, strings and bytevectors, recursively compares them, returning #t when the unfoldings of its arguments into (possibly infinite) trees are equal (in the sense of equal?) as ordered trees, and #f otherwise.
<ArneBab>johnwcowan: thank you! That sounds like we’re currently in violation of the spec.
<ArneBab>Which approaches are usually used to make equal? on circular data fast?
<dthompson>ArneBab: fast equal? with support for circular data is described in https://cs.indiana.edu/~dyb/pubs/equal.pdf
<dthompson>we used the algorithm described within for hoot, which does that pass equal benchmark https://codeberg.org/spritely/hoot/src/branch/main/lib/hoot/equal.scm
<ArneBab>that link (equal.pdf) doesn’t work -- archive.org shows that they restructured: https://legacy.cs.indiana.edu/~dyb/pubs/equal.pdf
<ArneBab>Looks like wingo implemented the equal? in hoot -- does something block using it in Guile-on-C?
<ArneBab>dthompson: ah, no, I misinterpreted the history … wingo just moved it, but you implemented it. sorry …
<ArneBab>(but same question)
<ArneBab>does it depend on anything that’s unavailable in Guile-on-C?
<dthompson>ArneBab: should be adaptable to guile just fine but the bootstrapping needs are going to be slightly different.
<dthompson>the main thing to deal with is that the slow path requires an eq hash table
<johnwcowan>That second url Isn't working either: legacy is down200
<johnwcowan>and it's not in the Wayback Machine either
<johnwcowan>oh wait, yes it is
<lechner>Hi, section 4.6 states that "Guile also comes with a growing number of command-line utilities: [...] and in the future, a system to install Guile packages from the internet." Is there a draft of that system, please?
<dsmith>browse
<civodul>lechner: see https://lists.gnu.org/archive/html/guile-user/2017-03/msg00168.html
<lechner>ok, thanks!
<lechner>Hi, does guild look in GUILE_LOAD_PATH for scripts?
<civodul>i think so
<lechner>ok, thanks!
<ArneBab>"fibers hang" ⇒ there’s fibers in a benchmark, but I can’t debug it right now: https://github.com/the-benchmarker/web-frameworks/pull/8999#issuecomment-3740467037 -- can one of you look into that?
<ArneBab>johnwcowan: ah, sorry, I didn’t check whether legacy was available outside the waybackmachine, because that’s where I found it …
<johnwcowan>np
<lechner>Hi, why is GNU Guile available under the LGPL rather than the GPL, please?
<mwette>w/ LGPL applications that use guile as extension (e.g., lilypond) can dynamically link in libguile and their higher-level code is not bound by GPL.
<mwette>necessarily bound
<lechner>mwette / Hi, isn't LilyPond also licensed under the GPL instead of the LGPL? https://lilypond.org/freedom.html
<mwette>ok, bad example, but guess you get the idea
<lechner>mwette / yeah, i get the idea---but i'm not sure i like it. is there an actual history of non-GPL code using libguile, as envisioned in the "turtle tutorial"?
<lechner>mwette / did you see my suggestions for the freezer?
<ArneBab>lechner: because Guile is intended to replace existing lax licensed or proprietary systems.
<ArneBab>In GNU, the LGPL is a strategic decision.
<ArneBab>As an example: I am writing dryads-wake under AGPL, but the game framework behind it (enter-three-witches) is under LGPL like Guile so people can use existing, proprietary stories in their games.
<lechner>ArneBab / Okay, thanks! I think I understand the motivation behind the LGPG---at least originally---although enthusiasm for it seems to have faded since. Why would I encourage, in 2026, the use of non-copyleft licenses when the copyleft is withering?
<lechner>ArneBab / Also, do you have examples for those existing, proprietary stories, please? I'm not a gamer personally
<janneke>lechner, mwette: the example holds, but fwiw, gnu lilypond is gplv3+
<ArneBab>Because LGPL is still copyleft. It’s always a question of what you want to replace. Currently most language libraries are lax licensed (Python BSD/PSF, Rust APL/MIT, most JS stuff, …).
<lechner>ArneBab / I thought the LGPL was particularly valuable when non-copyleft alternatives exists, such as Glibc. I'm not sure I see the value for unique software. Plus, I'm not sure how unique GNU Guile really is
<lechner>What I meant to say is that I think GNU Guile is special and therefore could be licensed under the GPL without hurting anybody who deserves protection
<johnwcowan>what are Guile's USPs, anyway?
<ArneBab>lechner: Guile is in fierce competition with lax licensed languages that are easy to proprietarize.
<ArneBab>johnwcowan: I wrote something for that: https://www.draketo.de/software/guile-10x
<ArneBab>lechner: for example when you want to create an interactive fiction game framework, you’re in competition with Ren’Py. And for creative works like games, people tend to have a hard time releasing them as free software.
<johnwcowan>ArneBab: I meant "as compared to other Schemes".
<ArneBab>johnwcowan: there the opinionated guide to scheme implementations gives a hint: https://wingolog.org/archives/2013/01/07/an-opinionated-guide-to-scheme-implementations
<ArneBab>johnwcowan: my personal take: it’s among the three most active schemes (Racket, Chicken, Guile) and it’s by GNU and LGPL licensed.
<ArneBab>It has a good REPL (that’s what’s the advantage over racket for me)
<ArneBab>Also Guile is pretty close to Unix -- it’s OS tooling is not too bad.
<ArneBab>And it’s fast enough: not too much slower than Racket.
<ArneBab>https://www.draketo.de/software/guile-fast#other-schemes
<ArneBab> https://www.draketo.de/software/r7rs-plot-2026-01.png
<ArneBab>Being the official extension language of GNU also means that it has a good chance to still be available and maintained in 20 years.
<ArneBab>Also by now I use Guix, so my whole system runs on Guile.
<ArneBab>johnwcowan: and support for SRFI-119 is a big boon for me ☺
<johnwcowan>I cantt see anyone trying to monetize Scheme at this point.
<lechner>ArneBab / Okay, thanks! Maybe games is where it's at nowadays? What are some of the games that you are thinking of, please, and what are their licensing strategies?
<ArneBab>johnwcowan: The spritely folks are financed (by donors).
<lechner>johnwcowan / Does that mean having chosen the LGPL over the GPL makes no difference to anyone?
<lechner>ArneBab / Which licenses does Spritely employ, please?
<johnwcowan>it matters, yes
<lilyp>it does make a difference to me, although ideally I wish it didn't
<ArneBab>lechner: games with renpy are something I want to enable: https://itch.io/games/made-with-renpy
<ArneBab>lechner: Spritely uses Apache for the stuff they add. I wish they used LGPL, too …
<dthompson>yeah we primarily use apache v2
<dthompson>lgpl doesn't give us anything, strategically
<ArneBab>lechner: the large majority of games are proprietary, but Ren’Py includes some LGPL code: https://www.renpy.org/doc/html/license.html
<ArneBab>LGPL licensed Sassy is the reason why Larceny is GPL compatible: https://larcenists.org/licensing.html
<ArneBab>So I think LGPL licensing matters a lot.
<lechner>ArneBab / okay, thanks! i'll look into that.
<ArneBab>LGPL means that people can’t just rip out part o a project and turn it into a proprietary blob.
<graywolf>Hi, I am trying to wrap my head around exceptions in Guile. Do I understand it right that (guard ...) from (rnrs exceptions) is unwinding, like (with-exception-handler ... #:unwind? #t)?
<lechner>ArneBab / has the LGPL been tested in court?
<ArneBab>(so I think that lax licensing in hoot is a mistake …)
<ArneBab>lechner: I had to search, and yes: https://www.theregister.com/2025/01/10/german_router_maker_avm_lgpl/ FritzBox had to release the source code.
<mwette>lechner: for freezer, no, I don't get emails for that repo. I'll check.
<lechner>oh yeah, that was a famous case
<lechner>ArneBab / ^
<lilyp>huh, first time I've heard of it, guess I'm still young
<lechner>dthompson / are you at liberty, as one of Spritely's officers, to volunteer more details about Spritely's licensing goals, please?
<dthompson>we want as few licensing barriers in the way of adoption as possible. at the same time, we want a license that has language concerning patents. apache v2 covers both things.
<ArneBab>dthompson: but the result is still LGPL, because it uses code from Guile, right?
<lechner>dthompson / Could (or does) Spritely use source modules licensed under the GPL?
<lilyp>depends; if you could technically use another scheme, then it's only LGPL as long as you include guile with it
<dthompson>not generally, no. that would be the case if guile used the gpl instead of lgpl
<graywolf>afaiui with lgpl, you can make proprietary hoot, you just need to offer a way to re-link it with changed guile, is that right?
<dthompson>lechner: we don't use gpl components in libraries
<mwette>ls
<lechner>dthompson / I'm not sure whether that's the road to riches or to serfdom
<lilyp>graywolf: yep, you need instructions for how to relink it to your own libguile
<johnwcowan>it matters, yes
<dthompson>lechner: I don't think that's a particularly useful way to think about it
<ArneBab>making it possible to make a proprietary hoot sounds like a pretty dangerous idea.
<dthompson>that would be very difficult in practice
<lechner>dthompson / I'd love to learn more about how you prefer to frame the choice?
<dthompson>talking specifically about hoot, it is mostly apache v2 with some lgpl bits that are derived from guile
<lechner>Does Hoot actually use Guile, or does it run in the browser?
<ArneBab>It runs in the browser, but it compiles to wasm via Guile.
<johnwcowan>once wanted to use a GPL library in proprietary software, so i wrote a simple GPLed server wrapper and ran that in a separate process
<ArneBab>johnwcowan: that’s why the AGPL exists ☺
<dthompson>lechner: the hoot compiler runs in the guile vm, as does a wasm interpreter. the main target runtime is web browsers, though.
<old>That's one thing I don't like much in the guile ecosystem. Most libraries are GPL instead of LGPL, so I can't use them with my LGPL library AFAIK
<johnwcowan>The AGPL doesn't require that all clients are free
<lechner>ArneBab / are you sure the Affero license would have covered it?
<old>By chance, ice-9 is LGPL so I can at least use core Guile even if I want to use MIT
<ArneBab>The AGPL requires that everyone who communicates with it via a server has access to the source code.
<lechner>why would you want to use MIT?
<lechner>ArneBab / I think johnwcowan served the GPL project, not the other way around
<old>Wide adoption is easier with MIT. I often make my public header file in C MIT to avoid any poentiel problem
<old>the library itself is LGPL and the test-suites are GPL
<lilyp>That is asking for trouble; the header should imho have the same license as the library (here LGPL).
<johnwcowan>lechner: exactly
<old>nah
<johnwcowan>in any case a .h file typically is just an interface, whuch is uncopyrightable (content/expression merger)
<old>under 15-lines maybe, otherwise it is AFAIK
<ArneBab>johnwcowan: that’s a legal gray area: the definition of linking in AGPLv3 is "subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work"
<old>I'm not a lawyer, but I do follow the advice from a friend of mine who as been making actual money with its free-software business for the past 15 years
<lechner>just so everyone knows: I'm not trying to be argumentative. I hope to offer some real novelty to GNU Guile in the future, such as an inline assembler, but also read this article (and grew up in an era when Winblows ruled the desktops) https://scholarship.law.columbia.edu/faculty_scholarship/3686/
<johnwcowan> i don't think communicating over TCP counts as "intimate"
<ArneBab>johnwcowan: with GPL you don’t need to give the source to people who just communicate with the program via a network server. With AGPL, you have to (that’s section 13: 13. Remote Network Interaction
<ArneBab> https://www.gnu.org/licenses/agpl-3.0.de.html
<lechner>ArneBab / johnwcowan would not mind. that part was under GPL
<ArneBab>my understanding is: whether it’s intimate communication depends on whether the interface is tailored specifically to the program.
<dsmith>lechner, Guile was originally under GPL with a special provision that linking with it did NOT require the app to be GPL. This was before there was an LGPL
<lechner>okay, wow!
<ArneBab>lechner: I know, I’m just talking about AGPL, not saying that the project by johnwcowan broke the GPL.
<ArneBab>(but my understanding is just mine: I’m neither a lawyer nor a court decision)
<dsmith>The purpose was to promote Guile as an extension lang. (Instead of tcl, which was popular at that time)
<lechner>was that successful?
<dsmith>No idea
<ArneBab>At least for Lilypond it was. That rules its domain (music engraving).
<johnwcowan>a web browser is tailored to communicate with HTTP servers
<ArneBab>johnwcowan: yes -- but HTTP servers use a standardized protocol and you don’t care what the implementation does.
<ArneBab>With GPL making a server is a safe bed.
<ArneBab>s/bed/bet/
<lechner>ArneBab / In which language is LilyPond written, please?
<ArneBab>lechner: in C with Guile embedded.
<ArneBab>lechner: lilypond is pretty awesome, by the way.
<lechner>I don't compose myself but I know you do
<johnwcowan>I can't think that HTTP being a standard makes a legal difference. I designed the protocol myself, but I dicymented it.
<johnwcowan>i
<lechner>Maybe it
<ArneBab>johnwcowan: with AGPL the requirement to provide modified code means that this gets harder. See https://www.gnu.org/licenses/agpl-3.0.html#section13
<lechner>Maybe it's time for the Guile community to come to terms with the fact that the world, in general, does not like Scheme. I mean how could Brazil have passed up Guile in favor of Lua because of Scheme's unfriendly syntax?
<ArneBab>johnwcowan: AGPL means that you have to ask whether a program is an extension of the library. For GPL that you only run serverside you never have to think about that.
<dsmith>lechner, https://codeberg.org/guile/guile/src/commit/b54a5b5af56b02aab5c892127ee9df991b25a895/README#L50-L68
<ArneBab>lechner: at the end of 2025 I checked my serverlogs and I saw quite a bit more interest than I expected:
<ArneBab> https://rollenspiel.social/@ArneBab/115808411798759511
<ArneBab>lechner: 2000 downloads of https://www.draketo.de/software/programming-scheme.pdf show that there’s some interest.
<ArneBab>As do over 11.000 visitors to the page https://www.draketo.de/software/programming-scheme
<old>ArneBab: will lilypond be re-written in pure Guile someday?
<ArneBab>old: I don’t know, but I don’t expect it.
<old>Or is it too much legacy stuff that needs to be kept in C, e.g. public API
<ArneBab>I wouldn’t call that legacy. It’s polished, professional software. You don’t just rewrite large parts of that.
<lechner>ArneBab / You've spoken fondly of LilyPond before. Are you the maintainer?
<ArneBab>lechner: no, I’m just a casual user. And have been for ~20 years.
<ArneBab>I love being able to integrate engraved notes so cleanly into my longbook.
<ArneBab>(though most of the songbook I can’t share, because it’s filled with songs I like to play privately, but don’t have the right to convey to others)
<lechner>old / How does your friend make money, please? Dual-licensing?
<lechner>ArneBab / covers?
<ArneBab>lechner: mainly just the original songs ☺ (so I can’t play them in public)
<ArneBab>lechner: the ones I’m allowed to share are on my website: https://www.draketo.de/kreatives/liederbuch#drucken
<lechner>dsmith / thanks for the historical pointer!
<ArneBab>The one I cannot share has grown to about 200 songs by now.
<lechner>but you transcribed the score in LilyPond?
<johnwcowan>Is Lilypond still on Guile 1.8?
<graywolf>What does #:unwind-for-type do in absence of #:unwind? ?
<ArneBab>Regarding "no interest": I have students who explicitly asked me whether they could do a project in Scheme.
<ArneBab>lechner: I transcribed some scores in LilyPond -- where I have scores. And integrate the result in a custom LaTeX frontend that looks like plain text with interleaved choreds.
<ArneBab>LilyPond is already on Guile 2 and 3 (depending on the build)
<ArneBab>johnwcowan: LilyPond is already on Guile 2 and 3 (depending on the build)
<johnwcowan>oh, good
<ArneBab>lechner: I say that I’m a casual lilypond user, because I use it now and then, and I very much like both its quality and its stability. If you create about one scoresheet per year, backwards compatibility matters a lot more than when you work with the tool every day.
<lechner>How do users provide input to LilyPond, and in which format does LilyPond store that work?
<lechner>ArneBab / Thanks for the data! You are preaching to the choir: I recoil from looking at Rust.
<mwette>Is there anyway to symbolically define, say, `one' to be 1 and use `one' in a case form like `(case x ((one) #t)))' ?
<ArneBab>lechner: lilypond supports an easy to write text format. See https://lilypond.org/doc/v2.24/Documentation/learning/compiling-a-file
<old>lechner: nah everything is open-source. The business works on consulting and support contracts of the softwares
<old>the dual-license just make it easier for some corporate to use the software => Potential future clients
<lechner>mwette / is that for ffi-arch?
<lechner>ArneBab / the single quote in c' means a quarter note?
<mwette>lechner: for c99/cpp.scm : converting the C preprocessor to use tokens
<ArneBab>lechner: the single quote means that it starts an octave higher.