Fix some suggested changes
This commit is contained in:
parent
d815cd1fc9
commit
a54084fcdc
|
@ -2,49 +2,48 @@ Canary is a post-structuralist graphical user interface (GUI) framework using
|
||||||
WebAssembly [1] (aka Wasm) scripting for its runtime logic.
|
WebAssembly [1] (aka Wasm) scripting for its runtime logic.
|
||||||
|
|
||||||
Canary's current maintainer and benevolent dictator for life [2] is Marceline
|
Canary's current maintainer and benevolent dictator for life [2] is Marceline
|
||||||
Cramer (<cramermarceline@gmail.com>, <mars@tebibyte.media>, GitHub:
|
Cramer (<cramermarceline@gmail.com>).
|
||||||
@marceline-cramer, Discord: @CrazyWazy#5915).
|
|
||||||
|
|
||||||
Modern GUI frameworks (such as Qt) typically work with the backend application
|
Modern GUI frameworks, such as Qt, are typically included by applications as
|
||||||
working on top of the GUI code. The GUI framework provides the event loop,
|
a lower layer of operation. The GUI framework provides the event loop, widgets,
|
||||||
widgets, styling, rendering, and window system integration, while the
|
styling, rendering, and window system integration, while the application uses
|
||||||
application uses that GUI functionality like a traditional library. This
|
that GUI functionality like a traditional library. This frame of design
|
||||||
frame of design philosophy creates large, heavily centralized GUI systems.
|
philosophy creates large, heavily centralized GUI systems. Complex application
|
||||||
Complex application interfaces are now only available through a limited number
|
interfaces are now only available through a limited number of existing GUI
|
||||||
of existing GUI frameworks, and as more applications become reliant on these
|
frameworks. As more applications become reliant on them, the frameworks are
|
||||||
frameworks, the frameworks are forced to accumulate even more features and
|
forced to accumulate even more features and complexity. This hurts competition,
|
||||||
complexity. This hurts competition, increases the resource usage of
|
increases the resource usage of applications, creates a walled garden for GUI
|
||||||
applications, creates a walled garden for GUI programming, and neuters variety
|
programming, and neuters variety and creativity.
|
||||||
and creativity.
|
|
||||||
|
|
||||||
Canary inverts this hierarchy by cutting the GUI Gordian knot between
|
Canary inverts this hierarchy by cutting the GUI Gordian knot between
|
||||||
application logic and frontend logic and relocating complex GUI code from a
|
application logic and frontend logic and relocating complex GUI code from a
|
||||||
static native library to a modular scriptable runtime that can be customized
|
static native library to a modular scriptable runtime that can be customized
|
||||||
by the user. Applications communicate with Canary scripts through
|
by the user. Applications communicate with Canary scripts through
|
||||||
informally-standardized protocols of messages, and the scripts provide the
|
informally-standardized protocols, and the scripts provide the layout, input
|
||||||
layout and rendering. Custom scripts implementing the same protocols can then be
|
handling, and rendering. Custom scripts implementing these protocols can then
|
||||||
provided by the user, which style, personalize, and enhance Canary GUIs without
|
be provided by the user, which style, personalize, and enhance Canary GUIs.
|
||||||
the need to recompile the target application or integrate with an upstream
|
This lifts the burden for the user of recompiling the target application or
|
||||||
framework.
|
integrating their changes into a larger upstream framework.
|
||||||
|
|
||||||
To see why this model of GUI design is so innovative, imagine a stereotypical
|
To understand the innovation of this design, imagine a stereotypical video game.
|
||||||
video game. This game has a health meter for the player that has a certain
|
Let's say that this game has a health meter for the player that has a certain
|
||||||
capacity and value. During the course of the game, that meter may be depleted
|
capacity and value. During the course of the game, that meter may be depleted
|
||||||
when the player takes damage, filled when the player uses a healing item, or
|
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
|
have its capacity increased when the player levels up. With Canary, the game
|
||||||
would group these events and give them a name, like "simplehealthmeter". Then,
|
would group these events and give them a name, like "simplehealthmeter". Then,
|
||||||
the game would ship with a Canary script that implements the "simplehealthmeter"
|
the game would ship with a Canary script that implements the
|
||||||
protocol and renders a basic red bar on the screen for the player's health while
|
"simplehealthmeter" protocol; it renders a basic red bar on the screen for the
|
||||||
updating the position of the bar based on those events. The player can then
|
player's health while updating the position of the bar based on those events.
|
||||||
provide their own script implementing the "simplehealthmeter" that renders a red
|
The player can then replace the provided script with their own
|
||||||
dial instead, or a Zelda-style hearts meter, or anything they want. Then, when
|
"simplehealthmeter" that renders a red dial instead, or a Zelda-style hearts
|
||||||
they show off their new customization and upload their script online, other
|
meter, or anything they want. Then, when they show off their new customization
|
||||||
players can use the new script for their health meter too.
|
and upload their script online, other players can use it for their health meter,
|
||||||
|
too.
|
||||||
|
|
||||||
Canary makes no assumptions about what the contents of your user interface may
|
Canary makes no assumptions about the contents of your user interface. It
|
||||||
be. It doesn't come with preset structures like "views," "containers," or even
|
doesn't come with preset structures like "views," "containers," or even
|
||||||
"widgets." Canary operates on the principle that you, the user, are the only
|
"widgets." Canary operates on the principle that you, the user, are the only
|
||||||
person capable of structuring your computer's GUI, to your arbitrary,
|
person capable of structuring your computer's GUI to your arbitrary,
|
||||||
personalized whims. Canary's design model is a bazaar, not a cathedral;
|
personalized whims. Canary's design model is a bazaar, not a cathedral;
|
||||||
improving and refining its content through anarchic word-of-mouth development
|
improving and refining its content through anarchic word-of-mouth development
|
||||||
between communities of users rather than through a centralized library of preset
|
between communities of users rather than through a centralized library of preset
|
||||||
|
@ -53,29 +52,28 @@ widgets, objects, and styling.
|
||||||
There is a very large pool of developers available who would be interested in a
|
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
|
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
|
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
|
fun. Canary, as a maximally-hackable GUI framework, could have a lot of appeal
|
||||||
to these kinds of people. A big advantage that hackable GUI has to other kinds
|
to these kinds of people. Changes to hackable GUIs are immediately apparent to
|
||||||
of hackable software is that changes to it are immediately apparent to anyone
|
uninitiated observers, which gives them a huge advantage on social media when
|
||||||
looking at it. Canary's plan for adoption is to post some initial demonstrations
|
compared to other kinds of hackable software. To gain adoption during early
|
||||||
and functional Canary programs on image-oriented social media like r/unixporn.
|
development, demonstrations of functional Canary programs will be posted on
|
||||||
Once attention has been garnered from these GUI-customizing users, Canary's
|
image-oriented social media such as r/unixporn. Once attention has been
|
||||||
developers will use the customizations and the scripts they write and share with
|
garnered from these GUI-customizing users, Canary's developers will use the
|
||||||
others to establish a functioning ecosystem of Canary scripts and regular
|
customizations and the scripts they write and share with others to establish a
|
||||||
contributors.
|
functioning ecosystem of Canary scripts and regular contributors.
|
||||||
|
|
||||||
Canary would make a good project to be accepted to Tebibyte Media because its
|
Canary is a promising candidate for Tebibyte Media Network membership because
|
||||||
post-structuralist nature of making no assumptions about the user's needs and
|
its post-structuralist nature of making no assumptions about the user's needs
|
||||||
its reliance on communal content creation matches Tebibyte Media's goals to
|
and its reliance on communal content creation matches Tebibyte Media's goals to
|
||||||
network users together towards similar ends. Other free software projects on
|
network users together towards similar ends. Other free software projects on
|
||||||
Tebibyte Media can use Canary for their GUI and convene with other network
|
Tebibyte Media can use Canary for their GUI and convene with other network
|
||||||
members to share Canary scripts.
|
members to share Canary scripts.
|
||||||
|
|
||||||
Canary would make a valuable member of the Tebibyte Media Network because its
|
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
|
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
|
reliance on communal content creation match the goals of the Network. Other
|
||||||
network users together towards similar ends. Other Network members could use
|
Network members could use Canary for their GUIs and have an active community of
|
||||||
Canary for their GUI and have an active community of Canary developers with whom
|
Canary developers with whom projects can share scripts with.
|
||||||
projects can share scripts with.
|
|
||||||
|
|
||||||
Canary is designed to be easy to develop alternative runtimes for, because its
|
Canary is designed to be easy to develop alternative runtimes for, because its
|
||||||
core featureset is restricted to what can be provided by common system libraries
|
core featureset is restricted to what can be provided by common system libraries
|
||||||
|
@ -88,15 +86,17 @@ desktop computer running any typical desktop operating system. Windows,
|
||||||
Linux-based OSes, the MacOS, and the BSDs will be supported. Although the option
|
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
|
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
|
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
|
low priority.
|
||||||
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
|
Canary's first target use case is to create alternatives to common desktop
|
||||||
|
widget 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 high priority for Canary; the current VR ecosystem
|
||||||
is in desperate need of better GUIs and more free software alternatives. Canary
|
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
|
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
|
engines such as Unity, StereoKit, and Bevy are considered first-class priority
|
||||||
for Canary support.
|
for Canary support.
|
||||||
|
|
||||||
|
@ -112,11 +112,10 @@ custom library.
|
||||||
If a third party distributes a shared library compiled from a modified copy of
|
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
|
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
|
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
|
that is only usable with their applications. For more information, see
|
||||||
strategy to "Embrace, Extend, and Extinguish" other companies' software
|
Microsoft's strategy to "Embrace, Extend, and Extinguish" software projects [3].
|
||||||
projects [3].
|
|
||||||
|
|
||||||
The selection of a copyleft license allows for canary-rs to be used alongside
|
The selection of a copyleft license allows canary-rs to be used alongside
|
||||||
proprietary applications while guaranteeing that the core Canary implementation
|
proprietary applications while guaranteeing that the core Canary implementation
|
||||||
remains free and open. Although this does not prevent alternative proprietary
|
remains free and open. Although this does not prevent alternative proprietary
|
||||||
runtimes from being written from scratch, it makes the creation of nonfree
|
runtimes from being written from scratch, it makes the creation of nonfree
|
||||||
|
@ -126,8 +125,8 @@ 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
|
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
|
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
|
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
|
features are offered. The LGPL's slightly more liberal requirements will be
|
||||||
essential to Canary's adoption outside of the free software evangelist space.
|
essential to adoption outside of the free software evangelist space.
|
||||||
|
|
||||||
References:
|
References:
|
||||||
1. https://webassembly.org
|
1. https://webassembly.org
|
||||||
|
|
Loading…
Reference in New Issue