libretro / libretro/RetroArch

[Feature Request] Add "Show Free Content Only" filter

Open
#19,360 2 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

feature request
Dominant language
C
Stars
14.1k
Forks
2.2k
Avg merge
7h 35m
Merged PRs (30d)
51

Description

[Please note that this issue has been revised to incorporate the concerns and points raised in the comments.]

1. The Core Licensing Challenge

1.1 Package Manager Compliance

However, non-free packages managed natively by conventional package managers (such as apt) are strictly forbidden in free distros. This restriction exists because these operating systems must comply with the Free System Distribution Guidelines (GNU FSDG).

While traditional package managers offer a clear way to isolate proprietary software, RetroArch’s built-in ecosystem lacks an in-app mechanism to prevent non-free content from appearing in its online updaters. Adding a dedicated toggle to filter out non-free listings would greatly benefit the free software community.

Filtering non-free software is straightforward in conventional Linux environments done with repositories. For instance, the apt package libretro-snes9x operates under a custom, source-available, non-commercial license. This renders it non-free according to the Free Software Foundation (FSF)'s Free Software Definition—specifically violating Freedom 0, which guarantees the freedom to run the program for any purpose.

Because of this licensing conflict:

  • The package is readily available in Ubuntu (verified via its package search), which includes a non-free repository called multiverse alongside its free repositories.
    • The libretro-snes9x package relies on libretro-core-info, which includes the snes9x_libretro.info metadata file (display_name = "Nintendo - SNES / SFC (Snes9x)"). As a result, RetroArch displays the core Nintendo - SNES / SFC (Snes9x) via Main Menu → Online Updater → Core Downloader.
  • The libretro-snes9x package is intentionally omitted (abandoned) in the Ubuntu-derived free distro Trisquel (verified via its package search), which complies with the GNU FSDG by maintaining only free repositories and excluding non-free channels entirely.
    • Conversely, because the non-free package is omitted, snes9x_libretro.info is excluded from libretro-info because it contains license = "Non-commercial". Consequently, RetroArch does not list Nintendo - SNES / SFC (Snes9x) in the Core Downloader.
1.2 RetroArch's Inbuilt Core Downloader

In older versions like retroarch 1.7.3 on Trisquel 11.0.1, the Show 'Core Downloader' setting (Settings → User Interface → Menu Visibility → Show 'Core Downloader) was unavailable—even when manually editing its corresponding setting menu_show_core_updater = "true" in retroarch.cfg. However, Show 'Core Downloader is now present in retroarch 1.18.0 on Trisquel 12.

Benefits with 'Core Downloader'

At the time of this writing, traditional operating system repositories offer a severely limited selection—providing only 12 libretro package options through Ubuntu's standard apt manager. In stark contrast, bypassing package managers and utilizing RetroArch's native Core Downloader unlocks a vast library of exactly 236 precompiled cores specifically built for GNU/Linux environments.

Issues with 'Core Downloader'

Once Settings > User Interface > Menu Visibility > Show 'Core Downloader' has been enabled, you can download non-free cores like Snes9x via Main Menu > Online Updater > Core Downloader > Nintendo - SNES / SFC (Snes9x) even in free distros like Trisquel GNU/Linux.

Screenshot from Trisquel 12:

Image

Because no native option currently exists to hide non-free items, free software activists and users maintaining strict compliance with free distros risk accidentally installing restricted software through the user interface (even though the license is listed next to the core in the list), while the lack of separation also degrades the overview of strictly free-only content. Additionally, free distributions adhering to the GNU Free System Distribution Guidelines (FSDG) do not want this mixed availability within their ecosystems, not for the sake of system stability or technical reliability, but for the preservation of user freedom.


2. Proposed Implementation Details

2.1. SPDX Identifiers in .info Files

See: * https://github.com/libretro/libretro-super/issues/2075

This will simplify the next step: enabling RetroArch functions to show or hide nonfree cores.

2.2. Hard-coded Setting

For packaged versions of RetroArch (such as those for strict free-software distributions), a hard-coded setting should make it impossible to enable nonfree content. This functions similarly to older packaging approaches—for example, in RetroArch 1.7.3 on Trisquel 11.0.1, where the Show 'Core Downloader' setting (Settings → User Interface → Menu Visibility → Show 'Core Downloader') was unavailable and ignored manual overrides of menu_show_core_updater = "true" in retroarch.cfg.

2.3. Soft-coded Setting

For users of official builds (such as the nightly AppImage release), a dedicated filtering configuration within the application menus can provide the option to toggle nonfree content:

  • Proposed setting name: Show Free Content Only
  • Location: Main Menu → Online Updater → Updater Settings
  • Setting action: Restricts downloadable items to those distributed under a certified free software license.
2.1 Functional Scope

When toggled on, the feature cross-references available items against accepted licenses under the Free Software Definition, ensuring restrictive source-available or non-commercial files are omitted from the download lists.

This filtering is made possible because core .info files already contain designated license information.

For example bsnes is distributed under GPLv3 while Snes9x is distributed under Non-commercial:


3. Scope of Impact

3.1 Behavioral Breakdown
  • Main Menu → Online Updater → Core Downloader
    • Current state: Lists a mix of both free and non-free emulator cores.
    • With setting enabled: Filters out non-free cores dynamically.
3.2 Ecosystem Benefits

This addition bridges the gap for users of 100% free operating systems, allowing them to utilize RetroArch's core management features conveniently without compromising their system's software policy or requiring manual external vetting.


4. Downstream Distribution Strategy

Should this feature request be successfully implemented, the next step will be to formally petition the maintainers of various 100% free GNU/Linux distributions. Specifically, the goal is to ask them to configure their packaging pipelines so that the Show Free Content Only setting is activated by default within the retroarch package distributed through their official software repositories.


5. Actionable Roadmap: Filing New GitHub Issues for Upstream Metadata and Filtering

To address missing metadata and ensure complete compliance across all download channels, new GitHub issues should be submitted to the official RetroArch repositories. Specifically, these issues will request the following improvements:

  • Add new .info files containing proper license fields, as these .info files are currently missing for content downloaded via:
  • Modify the application to automatically filter out and exclude any non-free content when users navigate these specific menus.

Upstream issue

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with RetroArch's Online Updater, Core Downloader, and Updater Settings entry points, then inspect the core .info metadata such as bsnes_libretro.info and snes9x_libretro.info and the related libretro-super issue. Done means a configurable free-content-only filter excludes non-free cores from the Core Downloader, with the proposed hard-coded packaging behavior and related downloader scope resolved.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.