Spinoff: text-only Jexer-based new project without java.desktop
Background
----------
Carlos Rafael Ramirez (@crramirez) emailed me describing his recent work in making a AWT/Swing-less (java.desktop-less) version of Jexer 1.7.x that can readily be compiled into a native executable. It is a very interesting idea! https://github.com/crramirez/jexer/pull/1 . While I won't be able to use this exact PR in Jexer mainline for the reasons listed below, I *do* want to support this capability in a meaningful way because I see a lot of great ways to generate ideas and applications that cross-pollinate between Jexer mainline and a java.desktop-less TUI library. :) Alright, so those reasons:
* Jexer mainline is going to keep digging into pixel-based operations, because it's just so fun. I want to keep the door open to someday implement an X11 server, run AWT/Swing-within-xterm, or whatever.
* My own applications on Windows need the Swing backend, and testing out features even on Linux is sometimes way easier in the Swing backend.
* It looks like this PR was AI/LLM generated, and there is enough "legal stuff" still ongoing on about AI/LLM that I don't want there to be any question around copyright/legal/whatever on either Jexer mainline or a java.desktop-less spinoff.
* The PR **Key Changes** discussion hits the major stuff, but missed one detail I think is important: for a java.desktop-less Jexer, the XTVERSION response from TTerminal/ECMA48 really should *not* be Jexer because others use that to fingerprint the terminal and would assume it has bitmap image support.
**OK, with that out of the way, I really appreciate the key *answer* that Carlos' work provides: if we can get AWT/Swing out of the execution path, then GraalVM AOT binaries will work *now*, rather than in some uncertain future when GraalVM finally supports AWT/Swing fully.** That's a big win worth going after.
Let's Do This
-------------
So let's do this. :smile: The timing is actually about perfect for a "cruft-less" Jexer-derived-but-*new*-library, much like [lcxterm](https://codeberg.org/AutumnMeowMeow/lcxterm)'s relationship to [qodem](https://gitlab.com/AutumnMeowMeow/qodem). So starting from today's git head, I want to end up here:
* A TUI library that is lean-and-mean without AWT/Swing -- not even via reflection -- but still pretty with gradients.
* The code dedicated to the public domain, with a CC0 fallback license. Derivatives won't even need to keep the source headers intact if they don't want to, it's fine. Or if someone wants to take theirs to GPL/LGPL/Apache/whatever, they can do so. (Plus it would be one less potential issue for AI/LLM tools in the future: even if those tools are found to be infringing on someone's copyright somewhere, there will be nothing *here* for them to infringe upon because it would be public domain.)
* A fresh git history.
* Maven-friendly and IDE-friendly. (I don't know Maven or the IDEs honestly, and I know Jexer mainline has suffered a bit for that.) That may mean renaming the "jexer" top-level package i.e. "import a.b.c.TApplication;".
* Ideally, a repo owned by someone else on whatever hosting platform they prefer. I would like Jexer mainline www/wiki/README.md to have pointers to it, but want it free to really evolve on its own. As much as I *love* the bitmap images stuff, it's a niche that prevents me from being the right person or leader to take Jexer into places like tui-rs / Ink or wherever the new hotness in TUIs / UIs is going.
Action Items
------------
- [x] Hard-fork Jexer git head into a new "thing". I'll need a new top-level project and package name.
- [x] Pull the wiki contents into the new code repo.
- [x] Change the XTVERSION response to the new name and version.
- [x] Relicense *all* of the codebase as public domain / CC0.
- [x] Update README.md, build.xml, pom.xml, TApplication, etc. to new name.
- [x] Replace jexer.* System property references with new prefix.
- [x] Commit that initial git repo, and tag it as v0.1.
- [x] Begin removing pieces, with a commit at each major step:
- [x] Tackboard
- [x] SwingBackend/SwingTerminal/etc. / TScreenOptionsWindow
- [x] Sixel decoder/encoders / MathUtils
- [x] GlyphMaker / ColorEmojiGlyphMaker / UnicodeGlyphImage
- [x] TImage / Animation / TButton image styles
- [x] Cell.image / TMenu icons
- [x] Remove remaining references to java.awt.Color (switch to int rgb).
- [x] Fix any remaining blockers to GraalVM native image running.
- [x] Tag this as v0.2.
- [x] Update Jexer mainline to point to the new project.
@crramirez, would you like to do the honor of naming this? :smiley: I want to put this in a place convenient for you: do you have a preferred Git hosting provider for the repository? I'd like to create the repo myself, put you on as maintainer/co-owner, and after the v0.2 tag transfer ownership to you. What do you think?
issue