WIP: Canary example network application #19
|
@ -0,0 +1,135 @@
|
|||
Canary is a post-structuralist graphical user interface (GUI) framework using
|
||||
WebAssembly [1] (aka Wasm) scripting for its runtime logic.
|
||||
|
||||
Canary's current maintainer and benevolent dictator for life [2] is Marceline
|
||||
Cramer (<cramermarceline@gmail.com>, <mars@tebibyte.media>, GitHub:
|
||||
@marceline-cramer, Discord: @CrazyWazy#5915).
|
||||
|
||||
Modern GUI frameworks (such as Qt) typically work with the backend application
|
||||
working on top of the GUI code. The GUI framework provides the event loop,
|
||||
widgets, styling, rendering, and window system integration, while the
|
||||
application uses that GUI functionality like a traditional library. This
|
||||
frame of design philosophy creates large, heavily centralized GUI systems.
|
||||
Complex application interfaces are now only available through a limited number
|
||||
of existing GUI frameworks, and as more applications become reliant on these
|
||||
frameworks, the frameworks are forced to accumulate even more features and
|
||||
complexity. This hurts competition, increases the resource usage of
|
||||
applications, creates a walled garden for GUI programming, and neuters variety
|
||||
and creativity.
|
||||
|
||||
emma
commented
Review
> and by relocating [...]
|
||||
Canary inverts this hierarchy by cutting the GUI Gordian knot between
|
||||
emma
commented
> modular scriptable runtime ~~that can be customized by the user~~.
|
||||
application logic and frontend logic and relocating complex GUI code from a
|
||||
static native library to a modular scriptable runtime that can be customized
|
||||
emma
commented
> protocols, through which scripts provide layout, [...] rendering information.
emma
commented
idk if "information" fits exactly but "the" should be replaced with some noun terminating the sentence. idk if "information" fits exactly but "the" should be replaced with some noun terminating the sentence.
|
||||
by the user. Applications communicate with Canary scripts through
|
||||
informally-standardized protocols of messages, and the scripts provide the
|
||||
layout and rendering. Custom scripts implementing the same protocols can then be
|
||||
provided by the user, which style, personalize, and enhance Canary GUIs without
|
||||
the need to recompile the target application or integrate with an upstream
|
||||
framework.
|
||||
emma
commented
maybe call it a "standard" video game? "stereotypical" doesn't seem to fit here. maybe call it a "standard" video game? "stereotypical" doesn't seem to fit here.
|
||||
|
||||
emma
commented
Something like that? > To understand the innovation of this design, imagine a video game that uses a
meter to display a capacity and value for the player's health.
Something like that?
|
||||
To see why this model of GUI design is so innovative, imagine a stereotypical
|
||||
mars marked this conversation as resolved
emma
commented
To understand the innovativation of this design, imagine a standard video game. To understand the innovativation of this design, imagine a standard video game.
|
||||
video game. This game has a health meter for the player that has a certain
|
||||
mars marked this conversation as resolved
emma
commented
Let's say this game has a health meter [...] Let's say this game has a health meter [...]
|
||||
capacity and value. During the course of the game, that meter may be depleted
|
||||
emma
commented
> that meter may be depleted [...] be filled [...] have its capacity [...]
|
||||
when the player takes damage, filled when the player uses a healing item, or
|
||||
have its capacity increase when the player levels up. With Canary, the game
|
||||
would group these events and give them a name, like "simplehealthmeter". Then,
|
||||
the game would ship with a Canary script that implements the "simplehealthmeter"
|
||||
protocol and renders a basic red bar on the screen for the player's health while
|
||||
updating the position of the bar based on those events. The player can then
|
||||
provide their own script implementing the "simplehealthmeter" that renders a red
|
||||
emma
commented
a footnote for this would be good. > Zelda-style hearts meter
a footnote for this would be good.
|
||||
dial instead, or a Zelda-style hearts meter, or anything they want. Then, when
|
||||
they show off their new customization and upload their script online, other
|
||||
players can use the new script for their health meter too.
|
||||
|
||||
Canary makes no assumptions about what the contents of your user interface may
|
||||
be. It doesn't come with preset structures like "views," "containers," or even
|
||||
"widgets." Canary operates on the principle that you, the user, are the only
|
||||
person capable of structuring your computer's GUI, to your arbitrary,
|
||||
mars marked this conversation as resolved
emma
commented
computer's GUI to your arbitrary, [...] computer's GUI to your arbitrary, [...]
|
||||
personalized whims. Canary's design model is a bazaar, not a cathedral;
|
||||
improving and refining its content through anarchic word-of-mouth development
|
||||
between communities of users rather than through a centralized library of preset
|
||||
widgets, objects, and styling.
|
||||
|
||||
There is a very large pool of developers available who would be interested in a
|
||||
system like Canary. Online communities such as Reddit's r/unixporn are filled
|
||||
with thousands of users who stylize and personalize their software's GUIs for
|
||||
fun. Canary, as a maximally-hackable GUI framework, would have a lot of appeal
|
||||
to these kinds of people. A big advantage that hackable GUI has to other kinds
|
||||
of hackable software is that changes to it are immediately apparent to anyone
|
||||
looking at it. Canary's plan for adoption is to post some initial demonstrations
|
||||
and functional Canary programs on image-oriented social media like r/unixporn.
|
||||
Once attention has been garnered from these GUI-customizing users, Canary's
|
||||
developers will use the customizations and the scripts they write and share with
|
||||
others to establish a functioning ecosystem of Canary scripts and regular
|
||||
contributors.
|
||||
emma
commented
> There is a not-insubstantial number of developers who would be interested in a
system like Canary. A maximally-hackable GUI framework are appealing to
communities such as Reddit's r/unixporn subreddit, where users who style their
GUIs for fun post their customizations. Hackable GUI frameworks make changes
immediately apparent to uninitiated observers, giving them an advantage in
publicity over other kinds of software.
>
> To garner a userbase, Canary's development process will be posted in the form
of screenshots to image-based social media. This is how the project will gain
contributors, a base of scripts for users to hack on, and generally a healthy
and functioning ecosystem—organically.
|
||||
|
||||
Canary would make a good project to be accepted to Tebibyte Media because its
|
||||
post-structuralist nature of making no assumptions about the user's needs and
|
||||
its reliance on communal content creation matches Tebibyte Media's goals to
|
||||
network users together towards similar ends. Other free software projects on
|
||||
emma
commented
goals goals ~~to network user together towards similar ends~~. You're addressing Tebibyte Media, we know what our goals are.
|
||||
Tebibyte Media can use Canary for their GUI and convene with other network
|
||||
mars marked this conversation as resolved
emma
commented
Tebibyte Media could use Canary for their GUIs [...] Tebibyte Media *could* use Canary for their GUIs [...]
|
||||
members to share Canary scripts.
|
||||
|
||||
Canary would make a valuable member of the Tebibyte Media Network because its
|
||||
post-structuralist nature (making no assumptions about the user's needs) and its
|
||||
reliance on communal content creation match the goals of the Network: to
|
||||
network users together towards similar ends. Other Network members could use
|
||||
Canary for their GUI and have an active community of Canary developers with whom
|
||||
projects can share scripts with.
|
||||
emma
commented
> for because [...]
|
||||
|
||||
emma
commented
Go with the latter version over the former. I much prefer it. Go with the latter version over the former. I much prefer it.
|
||||
Canary is designed to be easy to develop alternative runtimes for, because its
|
||||
emma marked this conversation as resolved
emma
commented
for because [...] for because [...]
|
||||
core featureset is restricted to what can be provided by common system libraries
|
||||
such as fontconfig and Harfbuzz. WebAssembly runtimes are in abundance for many
|
||||
languages, including C and C++; however, the current implementation, canary-rs,
|
||||
is written in Rust.
|
||||
|
||||
The platform that Canary is initially intended to operate on is the native
|
||||
desktop computer running any typical desktop operating system. Windows,
|
||||
Linux-based OSes, the MacOS, and the BSDs will be supported. Although the option
|
||||
shall be left open to develop a Canary runtime for web browsers, the web runtime
|
||||
must require a different design architecture from its native counterpart and is
|
||||
low priority. Canary's first target use case is to replace customizable desktop
|
||||
widget apps with Canary-enabled apps. These may be wallpapers apps like
|
||||
Wallpaper Engine or status bars such as Polybar or Waybar. Canary may even be
|
||||
used to implement mundane but near-universal GUIs like system clocks, calendars,
|
||||
music player controllers, or notification daemons.
|
||||
|
||||
Virtual reality is also a primary target for Canary; the current VR ecosystem
|
||||
is in desperate need of better GUIs and more free software alternatives. Canary
|
||||
was originally conceived to fill both of these needs. Thus, VR-capable 3D game
|
||||
engines such as Unity, StereoKit, and Bevy are considered first-class priority
|
||||
mars marked this conversation as resolved
emma
commented
"high priority" is a more common way of phrasing it. "high priority" is a more common way of phrasing it.
|
||||
for Canary support.
|
||||
|
||||
Canary-rs is licensed under the terms of the GNU Lesser General Public License
|
||||
version 3 (LGPLv3). The LGPLv3 is a copyleft license and is not permissive like
|
||||
MIT (aka Expat) or Apache-2.0. Both the LGPLv3 and permissive licenses allow
|
||||
works to be linked to proprietary software, such as Unreal Engine and the Unity
|
||||
game engine. The LGPLv3, however, requires that the work be linked to
|
||||
proprietary software as a shared library. This shared library must provide to
|
||||
emma
commented
> shared library; this shared library must provide [...]
|
||||
the user both a method to access its source code and a method to swap in a
|
||||
custom library.
|
||||
|
||||
If a third party distributes a shared library compiled from a modified copy of
|
||||
an LGPLv3-licensed work, they must supply the modified source code to their
|
||||
users. This prevents malicious parties from creating a custom canary-rs runtime
|
||||
that is only useable with their applications. For more info, see Microsoft's
|
||||
strategy to "Embrace, Extend, and Extinguish" other companies' software
|
||||
projects [3].
|
||||
|
||||
The selection of a copyleft license allows for canary-rs to be used alongside
|
||||
mars marked this conversation as resolved
emma
commented
> allows ~~for~~ canary-rs to be used alongside [...]
|
||||
proprietary applications while guaranteeing that the core Canary implementation
|
||||
remains free and open. Although this does not prevent alternative proprietary
|
||||
runtimes from being written from scratch, it makes the creation of nonfree
|
||||
runtimes much more difficult.
|
||||
|
||||
A stronger copyleft license such as the GPL or the AGPL is not used because it
|
||||
is important to Canary's adoption that it is used in as many applications as
|
||||
possible. Few game developers who are unfamiliar with free software will choose
|
||||
to take on the responsibilities that a non-Lesser GPL requires, no matter what
|
||||
features Canary offers. The LGPL's slightly more liberal requirements will be
|
||||
essential to Canary's adoption outside of the free software evangelist space.
|
||||
mars marked this conversation as resolved
emma
commented
Try to rephrase without saying "Canary" so many times. Try to rephrase without saying "Canary" so many times.
|
||||
|
||||
References:
|
||||
1. https://webassembly.org
|
||||
2. https://wikiless.org/wiki/Benevolent_dictator_for_life
|
||||
3. https://wikiless.org/wiki/Embrace,_extend,_and_extinguish
|