Re: Proposal: Include the Application Name in Ports and Packages

From: Baptiste Daroussin <bapt_at_FreeBSD.org>
Date: Fri, 09 Jul 2021 00:17:24 UTC
On Thu, Jul 08, 2021 at 08:35:12PM +0000, probono wrote:
> Hello,
> 
> This is a proposal to include the Application Name in Ports and Packages.
> Happy to hear your thoughts on this.
> 
> Kind regards,
> probono
> 
> 
> Terminology
> -----------
> 
> Application Port: A port that contains a graphical application and
> hence has an Exec= key in its share/applications/*.desktop file
> 
> Application Name: The application name (as intended by the application
> author). It may contain uppercase characters, whitespace, and special
> characters. Examples: "Qalculate!", "KTurtle", "SpeedCrunch".
> 
> Port Name: The package name is lowercase and does not contain special
> characters. Most frequently it is not identical to the Application
> Name. Examples: Examples: "math/qalculate", "lang/kturtle",
> "math/speedcrunch".
> 
> Package Name: Same as with the Port Name. Examples: "qalculate",
> "kturtle", "speedcrunch".
> 
> Situation
> ---------
> 
> The Application Name is the #1 metadata that should be shown to users
> in application catalogs, package managers, app centers, app stores,
> and so on.
> Basic tasks should be simple. Knowing the Application Name is a very
> basic task yet suprisingly nether Ports nor Packages contain this
> information: Currently there is no way to know the Application Name
> from looking at the files in /usr/ports/, and pkg only displays the
> Package Name but not the Application Name.
> App centers like freshports.org, OctoPkg, and GhostBSD Software
> Station hence also cannot show the Application Name but have to resort
> to showing Port Names without having to download all packages first,
> which defeats the purpose of having Ports/Packages metadata outside of
> the packages themselves.
> When BSD was started, it was centered mostly around command line
> tools, which usually have names equal to the Package Name, so in the
> beginning this was not an issue. But with graphical applications, this
> is no longer the case.
> 
> Heuristics
> ----------
> 
> 1. In most cases, the Application Name is contained in the value of
> the Name= key in the share/applications/*.desktop file of the main
> application contained in the port.
> 
> 2. If one of the first few words in the pkg-desc file is the word
> "is", then the word(s) appearing before "is" in the pkg-desc file
> often contain the Application Name. But this heuristic breaks for
> descriptions that do not follow the "X is a Y" structure.
> 
> 3. If the port contains an AppStream metainfo file in share/metainfo/,
> then the "name" key in the first "component" element often contains
> the Application Name. But over 1,200 ports with share/applications/*
> are currently lacking a share/applications/* file.
> 
> Proposal
> --------
> 
> 1. For Application Ports, include the Application Name as a mandatory
> key in the Makefile.
> 
> 2. Add checks to Ports tooling in order to ensure consistency of the
> Application Name across the desktop file, the pkg-desc file, and the
> AppStream metainfo file.
> 
> 3. Populate the Application Name for all Application Ports (doing this
> initialy can largely be automated using the heuristics described
> above)
> 4. Once this is implemented, adjust pkg(8) metadata and tooling to
> bring the Application Name into Packages and their repositories as
> well
> 
> 4. Once this is implemented, adjust pkg(8) metadata and tooling to
> bring the Application Name into Packages and their repositories as
> well
> 
> 5. Update App centers like freshports.org, OctoPkg, and GhostBSD
> Software Station to display (and make searchable) the Application Name
> 
> Best Practice
> -------------
> 
> HaikuDepot, the app center in Haiku, is using Application Names:
> https://www.haiku-os.org/docs/userguide/en/applications/haikudepot.html
> 
> Interested parties
> ------------------
> 
> * GhostBSD: https://github.com/ghostbsd/software-station (confirmed)
> * helloSystem: https://github.com/helloSystem/hello/issues/173 (confirmed)
> * Potentially FreshPorts
> * Potentially NomadBSD
> * Potentially OctoPkg
> 
I think there is a way more simple way to do it.

Simply add a new annotation to the package with the Application Name(s) when it
is relevant. I add plural because some ports do provide multiple Application
Name(s).
And you will have the information everywhere.
See how CPE is implemented in the ports tree to see how to do that.

That will do all you ask for if I am not mistaking ;)

Best regards,
bapt