call_end

    • chevron_right

      Flathub Blog: Enhanced License Compliance Tools for Flathub

      news.movim.eu / PlanetGnome • 24 October • 4 minutes

    tl;dr: Flathub has improved tooling to make license compliance easier for developers. Distros should rebuild OS images with updated runtimes from Flathub; app developers should ensure they're using up-to-date runtimes and verify that licenses and copyright notices are properly included.

    In early August, a concerned community member brought to our attention that copyright notices and license files were being omitted when software was bundled as Flatpaks and distributed via Flathub. This was a genuine oversight across multiple projects, and we're glad we've been able to take the opportunity to correct and improve this for runtimes and apps across the Flatpak ecosystem.

    Over the past few months, we've been working to enhance our tooling and infrastructure to better support license compliance. With the support of the Flatpak, freedesktop-sdk, GNOME, and KDE teams, we've developed and deployed significant improvements that make it easier than ever for developers to ensure their applications properly include license and copyright notices.

    What's New

    In coordination with maintainers of the freedesktop-sdk , GNOME , and KDE runtimes, we've implemented enhanced license handling that automatically includes license and copyright notice files in the runtimes themselves, deduplicated to be as space-efficient as possible. This improvement has been applied to all supported freedesktop-sdk, GNOME, and KDE runtimes, plus backported to freedesktop-sdk 22.08 and newer, GNOME 45 and newer, KDE 5.15-22.08 and newer, and KDE 6.6 and newer. These updated runtimes cover over 90% of apps on Flathub and have already rolled out to users as regular Flatpak updates.

    We've also worked with the Flatpak developers to add new functionality to flatpak-builder 1.4.5 that automatically recognizes and includes common license files. This enhancement, now deployed to the Flathub build service, helps ensure apps' own licenses as well as the licenses of any bundled libraries are retained and shipped to users along with the app itself.

    These improvements represent an important milestone in the maturity of the Flatpak ecosystem, making license compliance easier and more automatic for the entire community.

    Recommended Actions

    App Developers

    We encourage you to rebuild your apps with flatpak-builder 1.4.5 or newer to take advantage of the new automatic license detection. You can verify that license and copyright notices are properly included in your Flatpak's /app/share/licenses , both for your app and any included dependencies. In most cases, simply rebuilding your app will automatically include the necessary licenses, but you can also fine-tune which license files are included using the license-files key in your app's Flatpak manifest if needed.

    For apps with binary sources (e.g. debs or rpms), we encourage app maintainers to explicitly include relevant license files in the Flatpak itself for consistency and auditability.

    End-of-life runtime transition: To focus our resources on maintaining high-quality, up-to-date runtimes, we'll be completing the removal of several end-of-life runtimes in January 2026. Apps using runtimes older than freedesktop-sdk 22.08, GNOME 45, KDE 5.15-22.08 or KDE 6.6 will be marked as EOL shortly. Once these older runtimes are removed, the apps will need to be updated to use a supported runtime to remain available on Flathub. While this won't affect existing app installations, after this date, new users will be unable to install these apps from Flathub until they're rebuilt against a current runtime. Flatpak manifests of any affected apps will remain on the Flathub GitHub organization to enable developers to update them at any time.

    If your app currently targets an end-of-life runtime that did receive the backported license improvements, we still strongly encourage you to upgrade to a newer, supported runtime to benefit from ongoing security updates and platform improvements.

    Distributors

    If you redistribute binaries from Flathub, such as pre-installed runtimes or apps, you should rebuild your distributed images (ISOs, containers, etc.) with the updated runtimes and apps from Flathub. You can verify that appropriate licenses are included with the Flatpaks in the runtime filesystem at /usr/share/licenses inside each runtime.

    Get in Touch

    App developers, distributors, and community members are encouraged to connect with the team and other members of the community in our Discourse forum and Matrix chat room . If you are an app developer or distributor and have any questions or concerns, you may also reach out to us at admins@flathub.org .

    Thank You!

    We are grateful to Jef Spaleta from Fedora for his care and confidentiality in bringing this to our attention and working with us collaboratively throughout the process. Special thanks to Boudhayan Bhattcharya (bbhtt) for his tireless work across Flathub, Flatpak and freedesktop-sdk, on this as well as many other important areas. And thank you to Abderrahim Kitouni (akitouni), Adrian Vovk (AdrianVovk), Aleix Pol Gonzalez (apol), Bart Piotrowski (barthalion), Ben Cooksley (bcooksley), Javier Jardón (jjardon), Jordan Petridis (alatiera), Matthias Clasen (matthiasc), Rob McQueen (ramcq), Sebastian Wick (swick), Timothée Ravier (travier), and any others behind the scenes for their hard work and timely collaboration across multiple projects to deliver these improvements.

    Our Linux app ecosystem is truly strongest when individuals from across companies and projects come together to collaborate and work towards shared goals. We look forward to continuing to work together to ensure app developers can easily ship their apps to users across all Linux distributions and desktop environments. ♥

    • chevron_right

      Matthias Clasen: SVG in GTK

      news.movim.eu / PlanetGnome • 23 October • 3 minutes

    GTK has been using SVG for symbolic icons since essentially forever. It hasn’t been a perfect relationship, though.

    Pre-History

    For the longest time (all through the GTK 3 era, and until recently), we’ve used librsvg indirectly, through gdk-pixbuf, to obtain rendered icons, and then we used some pixel tricks to recolor the resulting image according to the theme.

    Symbolic icon, with success color

    This works, but it gives up on the defining feature of SVG: its scalability.

    Once you’ve rasterized your icon at a given size, all you’re left with is pixels. In the GTK 3 era, this wasn’t a problem, but in GTK 4, we have a scene graph and fractional scaling, so we could do *much* better if we don’t rasterize early.

    Symbolic icon, pixellated

    Unfortunately, librsvg’s API isn’t set up to let us easily translate SVG into our own render nodes. And its rust nature makes for an inconvenient dependency, so we held off on depending on it for a long time.

    History

    Early this year, I grew tired of this situation, and decided to improve our story for icons, and symbolic ones in particular.

    So I set out to see how hard it would be to parse the very limited subset of SVG used in symbolic icons myself. It turned out to be relatively easy . I quickly managed to parse 99% of the Adwaita symbolic icons, so I decided to merge this work for GTK 4.20.

    There were some detours and complications along the way. Since my simple parser couldn’t handle 100% of Adwaita (let alone all of the SVGs out there), a fallback to a proper SVG parser was needed. So we added a librsvg dependency after all. Since our new Android backend has an even more difficult time with rust than our other backends, we needed to arrange for a non-rust librsvg branch to be used when necessary.

    One thing that this hand-rolled SVG parser improved upon is that it allows stroking, in addition to filling. I documented the format for symbolic icons here .

    Starting over

    A bit later, I was inspired by Apple’s SF Symbols work to look into how hard it would be to extend my SVG parser with a few custom attributes to enable dynamic strokes.

    It turned out to be easy again . With a handful of attributes , I could create plausible-looking animations and transitions. And it was fun to play with. When I showed this work to Jakub and Lapo at GUADEC, they were intrigued, so I decided to keep pushing this forward, and it landed in early GTK 4.21, as GtkPathPaintable .

    To make experimenting with this easier, I made a quick editor.  It was invaluable to have Jakub as an early adopter play with the editor while I was improving the implementation. Some very good ideas came out of this rapid feedback cycle, for example dynamic stroke width.

    You can get some impression of the new stroke-based icons Jakub has been working on here .

    Recent happenings

    As summer was turning to fall, I felt that I should attempt to support SVG more completely, including grouping and animations. GTK’s rendering infrastructure has most of the pieces that are required for SVG after all: transforms, filters, clips, paths, gradients are all supported.

    This was *not* easy.

    But eventually, things started to fall into place. And this week, I’ve replaced  GtkPathPaintable with GtkSvg , which is a GdkPaintable that supports SVG. At least, the subset of SVG that is most relevant for icons. And that includes animations.

    This is still a subset of full SVG, but converting a few random lottie files to SVG animations gave me a decent success rate for getting things to display mostly ok.

    The details are spelled out here .

    Summary

    GTK 4.22 will natively support SVG, including SVG animations.

    If you’d like to help improve this further, here are some some suggestions.

    If you would like to support the GNOME foundation, who’s infrastructure and hosting GTK relies on, please donate .

    ❤

    • chevron_right

      Jonathan Blandford: Crosswords 0.3.16: 2025 Internship Results

      news.movim.eu / PlanetGnome • 23 October • 3 minutes

    Time for another GNOME Crosswords release! This one highlights the features our interns did this past summer. We had three fabulous interns — two through GSoC and one through Outreachy. While this release really only has three big features — one from each — they were all fantastic.

    Thanks goes to to my fellow GSoC mentors Federico and Tanmay. In addition, Tilda and the folks at Outreachy were extremely helpful. Mentorship is a lot of work, but it’s also super-rewarding. If you’re interested in participating as a mentor in the future and have any questions about the process, let me know. I’ll be happy to speak with you about them.

    Dictionary pipeline improvements

    First, our Outreachy intern Nancy spent the summer improving the build pipeline to generate the internal dictionaries we use. These dictionaries are used to provide autofill capabilities and add definitions to the Editor, as well as providing near-instant completions for both the Editor and Player. The old pipeline was buggy and hard to maintain. Once we had a cleaned it up, Nancy was able to use it to effortlessly produce a dictionary in her native tongue: Swahili.

    A Grid in swahili

    We have no distribution story yet, but it’s exciting to have it so much easier to create dictionaries in other languages. It opens the door to the Editor being more universally useful (and fulfills a core GNOME tenet).

    You can read about it more details in Nancy’s final report .

    Word List

    Victor did a ton of research for Crosswords, almost acting like a Product Manager. He installed every crossword editor he could find and did a competitive analysis , noting possible areas for improvement. One of the areas he flagged was the word list in our editor. This list suggests words that could be used in a given spot in the grid. We started with a simplistic implementation that listed every possible word in our dictionary that could fit. This approach— while fast — provided a lot of dead words that would make the grid unsolvable. So he set about trying to narrow down that list.

    New Word List showing possible options

    It turns out that there’s a lot of tradeoffs to be made here ( Victor’s post ). It’s possible to find a really good set of words, at the cost of a lot of computational power. A much simpler list is quick but has dead words. In the end, we found a happy medium that let us get results fast and had a stable list across a clue. He’ll be blogging about this shortly.

    Victor also cleaned up our development docs , and researched satsolve algorithms for the grid. He’s working on a lovely doc on the AC-3 algorithm, and we can use it to add additional functionality to the editor in the future.

    Printing

    Toluwaleke implemented printing support for GNOME Crosswords.

    This was a tour de force, and a phenomenal addition to the Crosswords codebase. When I proposed it for a GSoC project, I had no idea how much work this project could involve. We already had code to produce an svg of the grid — I thought that we could just quickly add support for the clues and call it a day. Instead, we ended up going on a wild ride resulting in a significantly stronger feature and code base than we had going in.

    His blog has more detail and it’s really quite cool ( go read it! ). But from my perspective, we ended up with a flexible and fast rendering system that can be used in a lot more places. Take a look:

    The resulting PDFs are really high quality — they seem to look better than some of the newspaper puzzles I’ve seen. We’ll keep tweaking them as there are still a lot of improvements we’d like to add, such as taking the High Contrast / Large Text A11Y options into account. But it’s a tremendous basis for future work.

    Increased Polish

    There were a few other small things that happened

    • I hooked Crosswords up to Damned Lies . This led to an increase in our translation quality and count
    • This included a Polish translation, which came with a new downloader!
    • I ported all the dialogs to AdwDialog, and moved on from (most) of the deprecated Gtk4 widgets
    • A lot of code cleanups and small fixes

    Now that these big changes have landed, it’s time to go back to working on the rest of the changes proposed for GNOME Circle.

    Until next time, happy puzzling!

    • chevron_right

      Toluwaleke Ogundipe: GSoC Final Report: Printing in GNOME Crosswords

      news.movim.eu / PlanetGnome • 22 October • 3 minutes

    A few months ago, I introduced my GSoC project : Adding Printing Support to GNOME Crosswords . Since June, I’ve been working hard on it, and I’m happy to share that printing puzzles is finally possible!

    The Result

    GNOME Crosswords now includes a Print option in its menu, which opens the system’s print dialog. After adjusting printer settings and page setup, the user is shown a preview dialog with a few crossword-specific options, such as ink-saving mode and whether (and how) to include the solution. The options are intentionally minimal, keeping the focus on a clean and straightforward printing experience.

    Below is a short clip showing the feature in action:

    The resulting file: output.pdf

    Crosswords now also ships with a standalone command-line tool, ipuz2pdf , which converts any IPUZ puzzle file into a print-ready PDF. It offers a similarly minimal set of layout and crossword-specific options.

    The Process

    • Studied and profiled the existing code and came up with an overall approach for the project.
    • Built a new grid rendering framework, resulting in a 10× speedup in rendering. Dealt with a ton of details around text placement and rendering, colouring, shapes, and more.
    • Designed and implemented a print layout engine with a templating system , adjusted to work with different puzzle kinds, grid sizes, and paper sizes.
    • Integrated the layout engine with the print dialog and added a live print preview .
    • Bonus: Created ipuz2pdf , a standalone command-line utility (originally for testing) that converts an IPUZ file into a printable PDF.

    The Challenges

    Working on a feature of this scale came with plenty of challenges. Getting familiar with a large codebase took patience, and understanding how everything fit together often meant careful study and experimentation. Balancing ideas with the project timeline and navigating code reviews pushed me to grow both technically and collaboratively.

    On the technical side, rendering and layout had their own hurdles. Handling text metrics, scaling, and coordinate transformations required a mix of technical knowledge, critical thinking, and experimentation. Even small visual glitches could lead to hours of debugging. One notably difficult part was implementing the box layout system that powers the dynamic print layout engine.

    The Lessons

    This project taught me a lot about patience, focus, and iteration. I learned to approach large problems by breaking them into small, testable pieces, and to value clarity and simplicity in both code and design. Code reviews taught me to communicate ideas better, accept feedback gracefully, and appreciate different perspectives on problem-solving.

    On the technical side, working with rendering and layout systems deepened my understanding of graphics programming. I also learned how small design choices can ripple through an entire codebase, and how careful abstraction and modularity can make complex systems easier to evolve.

    Above all, I learned the value of collaboration, and that progress in open source often comes from many small, consistent improvements rather than big leaps.

    The Conclusion

    In the end, I achieved all the goals set out for the project, and even more. It was a long and taxing journey, but absolutely worth it.

    The Gratitude

    I’m deeply grateful to my mentors, Jonathan Blandford and Federico Mena Quintero , for their guidance, patience, and support throughout this project. I’ve learned so much from working with them. I’m also grateful to the GNOME community and Google Summer of Code for making this opportunity possible and for creating such a welcoming environment for new contributors.

    What Comes After

    No project is ever truly finished, and this one is no exception. There’s still plenty to be done, and some already have tracking issues . I plan to keep improving the printing system and related features in GNOME Crosswords.

    I also hope to stay involved in the GNOME ecosystem and open-source development in general. I’m especially interested in projects that combine design, performance, and system-level programming. More importantly, I’m a recent CS graduate looking for a full-time role in the field of interest stated earlier. If you have or know of any opportunities, please reach out at feyidab01@gmail.com .

    Finally, I plan to write a couple of follow-up posts diving into interesting parts of the process in more detail. Stay tuned!

    Thank you!

    • chevron_right

      Michael Meeks: 2025-10-22 Wednesday

      news.movim.eu / PlanetGnome • 22 October

    • Slept badly, up early, mail chew, sync with Dave. Plugged away at 2026 projections with Julie & Tracie.
    • Published the next TORF strip highlighting why what everyone really wants is a support and maintenance subscription:
    • Snatched lunch, engaging CP all-hands meeting, all afternoon & evening Collabora quarterly mgmt meeting.
    • chevron_right

      Jussi Pakkanen: CapyPDF 1.8.0 released

      news.movim.eu / PlanetGnome • 21 October • 1 minute

    I have just released CapyPDF 1.8. It's mostly minor fixes and tweaks but there are two notable things. The first one is that CapyPDF now supports variable axis fonts. The other one is that CapyPDF will now produce PDF version 2.0 files instead of 1.7 by default. This might seem like a big leap but really isn't. PDF 2.0 is pretty much the same as 1.7, just with documentation updates and deprecating (but not removing) a bunch of things. People using PDF have a tendency to be quite conservative in their versions, but PDF 2.0 has been out since 2017 with most of it being PDF 1.7 from 2008.

    It is still possible to create version with older PDF specs. If you specify, say, PDF/X3, CapyPDF will output PDF 1.3 as the spec requires that version and no other even though, for example, Adobe's PDF tools accept PDF/X3 whose version later than 1.3.

    The PDF specification is currently undergoing major changes and future versions are expected to have backwards incompatible features such as HDR imaging. But 2.0 does not have those yet.

    Things CapyPDF supports

    CapyPDF has implemented a fair chunk of the various PDF specs:

    • All paint and text operations
    • Color management
    • Optional content groups
    • PDF/X and PDF/A support
    • Tagged PDF (i.e. document structure and semantic information)
    • TTF, OTF, TTC and CFF fonts
    • Forms (preliminary)
    • Annotations
    • File attachments
    • Outlines
    • Page naming
    In theory this should be enough to support things like XRechnung and documents with full accessibility information as per PDF/UA . These have not been actually tested as I don't have personal experience in German electronic invoicing or document accessibility.

    • chevron_right

      Dorothy Kabarozi: Laravel Mix “Unable to Locate Mix File” Error: Causes and Fixes

      news.movim.eu / PlanetGnome • 21 October • 2 minutes


    Laravel Mix “Unable to Locate Mix File” Error: Causes and Fixes

    If you’re working with Laravel and using Laravel Mix to manage your CSS and JavaScript assets, you may have come across an error like this:

    Spatie\LaravelIgnition\Exceptions\ViewException  
    Message: Unable to locate Mix file: /assets/vendor/css/rtl/core.css
    
    

    Or in some cases:

    Illuminate\Foundation\MixFileNotFoundException
    Unable to locate Mix file: /assets/vendor/fonts/boxicons.css
    
    

    This error can be frustrating, especially when your project works perfectly on one machine but fails on another. Let’s break down what’s happening and how to solve it.


    What Causes This Error?

    Laravel Mix is a wrapper around Webpack , designed to compile your resources/ assets (CSS, JS, images) into the public/ directory. The mix() helper in Blade templates references these compiled assets using a special file: mix-manifest.json .

    This error occurs when Laravel cannot find the compiled asset . Common reasons include:

    1. Assets are not compiled yet
      If you’ve just cloned a project, the public/assets folder might be empty. Laravel is looking for files that do not exist yet.
    2. mix-manifest.json is missing or outdated
      This file maps original asset paths to compiled paths. If it’s missing, Laravel Mix won’t know where to find your assets.
    3. Incorrect paths in Blade templates
      If your code is like: <link rel="stylesheet" href="{{ asset(mix('assets/vendor/css/rtl/core.css')) }}" /> but the RTL folder or the file doesn’t exist, Mix will throw an exception.
    4. Wrong configuration
      Some themes use variables like $configData['rtlSupport'] to toggle right-to-left CSS. If it’s set incorrectly, Laravel will try to load files that don’t exist.

    How to Fix It

    Here’s a step-by-step solution:

    1. Install NPM dependencies

    Make sure you have Node.js installed, then run:

    npm install
    
    

    2. Compile your assets

    • Development mode (fast, unminified):
    npm run dev
    
    
    • Production mode (optimized, minified):
    npm run build
    
    

    This will generate your CSS and JS files in the public folder and update mix-manifest.json .

    3. Check mix-manifest.json

    Ensure the manifest contains the file Laravel is looking for:

    "/assets/vendor/css/rtl/core.css": "/assets/vendor/css/rtl/core.css"
    
    

    4. Adjust Blade template paths

    If you don’t use RTL, you can set:

    $configData['rtlSupport'] = '';
    
    

    so the code doesn’t try to load /rtl/core.css unnecessarily.

    5. Clear caches

    Laravel may cache old views and configs. Clear them:

    php artisan view:clear
    php artisan config:clear
    php artisan cache:clear
    
    

    Pro Tips

    • Always check if the file exists in public/assets/... after compiling.
    • If you move your project to another machine or server, you must run npm install and npm run dev again.
    • For production, make sure your server has Node.js and NPM installed , otherwise Laravel Mix cannot build the assets.

    Conclusion

    The “Unable to locate Mix file” error is not a bug in Laravel , but a result of missing compiled assets or misconfigured paths. Once you:

    1. Install dependencies.
    2. Compile assets,
    3. Correct Blade paths, and
    4. Clear caches; your Laravel project should load CSS and JS files without issues.

    • chevron_right

      Daniel García Moreno: GNOME Tour in openSUSE and welcome app

      news.movim.eu / PlanetGnome • 21 October • 1 minute

    As a follow up of the Hackweek 24 project , I've continued working on the gnome-tour fork for openSUSE with custom pages to replace the welcome application for openSUSE distributions.

    GNOME Tour modifications

    All the modifications are on top of upstream gnome-tour and stored in the openSUSE/gnome-tour repo

    • Custom initial page

    gnome-tour-opensuse.png

    • A new donations page . In openSUSE we remove the popup from GNOME shell for donations, so it's fair to add it in this place.

    gnome-tour-donation.png

    • Last page with custom openSUSE links , this one is the used for opensuse-welcome app.

    opensuse-welcome package

    The original opensuse-welcome is a qt application, and this one is used for all desktop environments, but it's more or less unmaintained and looking for a replacement, we can use the gnome-tour fork as the default welcome app for all desktop without a custom app.

    To do a minimal desktop agnostic opensuse-welcome application, I've modified the gnome-tour to also generate a second binary but just with the last page.

    The new opensuse-welcome rpm package is built as a subpackage of gnome-tour . This new application is minimal and it doesn't have lots of requirements, but as it's a gtk4 application, it requires gtk and libadwaita, and also depends on gnome-tour-data to get the resoures of the app.

    opensuse-welcome.png

    To improve this welcome app we need to review the translations, because I added three new pages to the gnome-tour and that specific pages are not translated, so I should regenerate the .po files for all languages and upload to openSUSE Weblate for translations.

    • chevron_right

      Matthew Garrett: Where are we on XChat security?

      news.movim.eu / PlanetGnome • 21 October • 3 minutes

    AWS had an outage today and Signal was unavailable for some users for a while. This has confused some people, including Elon Musk, who are concerned that having a dependency on AWS means that Signal could somehow be compromised by anyone with sufficient influence over AWS (it can't). Which means we're back to the richest man in the world recommending his own "X Chat", saying The messages are fully encrypted with no advertising hooks or strange “AWS dependencies” such that I can’t read your messages even if someone put a gun to my head .

    Elon is either uninformed about his own product, lying, or both.

    As I wrote back in June , X Chat genuinely end-to-end encrypted, but ownership of the keys is complicated. The encryption key is stored using the Juicebox protocol, sharded between multiple backends. Two of these are asserted to be HSM backed - a discussion of the commissioning ceremony was recently posted here . I have not watched the almost 7 hours of video to verify that this was performed correctly, and I also haven't been able to verify that the public keys included in the post were the keys generated during the ceremony, although that may be down to me just not finding the appropriate point in the video (sorry, Twitter's video hosting doesn't appear to have any skip feature and would frequently just sit spinning if I tried to seek to far and I should probably just download them and figure it out but I'm not doing that now). With enough effort it would probably also have been possible to fake the entire thing - I have no reason to believe that this has happened, but it's not externally verifiable.

    But let's assume these published public keys are legitimately the ones used in the HSM Juicebox realms[1] and that everything was done correctly. Does that prevent Elon from obtaining your key and decrypting your messages? No.

    On startup, the X Chat client makes an API call called GetPublicKeysResult, and the public keys of the realms are returned. Right now when I make that call I get the public keys listed above, so there's at least some indication that I'm going to be communicating with actual HSMs. But what if that API call returned different keys? Could Elon stick a proxy in front of the HSMs and grab a cleartext portion of the key shards? Yes, he absolutely could, and then he'd be able to decrypt your messages.

    (I will accept that there is a plausible argument that Elon is telling the truth in that even if you held a gun to his head he's not smart enough to be able to do this himself, but that'd be true even if there were no security whatsoever, so it still says nothing about the security of his product)

    The solution to this is remote attestation - a process where the device you're speaking to proves its identity to you. In theory the endpoint could attest that it's an HSM running this specific code, and we could look at the Juicebox repo and verify that it's that code and hasn't been tampered with, and then we'd know that our communication channel was secure. Elon hasn't done that, despite it being table stakes for this sort of thing (Signal uses remote attestation to verify the enclave code used for private contact discovery, for instance, which ensures that the client will refuse to hand over any data until it's verified the identity and state of the enclave). There's no excuse whatsoever to build a new end-to-end encrypted messenger which relies on a network service for security without providing a trustworthy mechanism to verify you're speaking to the real service.

    We know how to do this properly. We have done for years. Launching without it is unforgivable.

    [1] There are three Juicebox realms overall, one of which doesn't appear to use HSMs, but you need at least two in order to obtain the key so at least part of the key will always be held in HSMs

    comment count unavailable comments