Episode Transcript
Transcripts are displayed as originally observed. Some content, including advertisements may have changed.
Use Ctrl + F to search
0:03
I'd like to tell you a little story about
0:05
packaging OBS Studio. And
0:08
if you're a very close friend of mine, this
0:10
is not the story where I did some contract
0:12
work where I was paid in one kilo
0:15
of 100% Colombian and
0:17
took it round to Popey's house for processing.
0:19
Are we allowed to talk about that? This
0:24
is an entirely different story. This
0:26
is a story about running OBS
0:29
Studio for Ubuntu on
0:31
NixOS and why this is
0:33
a pretty
0:33
fabulous experience. Right.
0:36
I don't fully understand what you mean by that. So I
0:39
expect I'm about to learn quite a lot. Yes,
0:41
I've learned quite a lot in the last few months
0:43
as well. So we'll start the story here.
0:46
A little background. I used
0:48
to maintain the snap of OBS
0:51
Studio, which is
0:53
still very popular. Some 70,000 people
0:56
are still using it, despite the fact it
0:58
hasn't been updated for over two years.
1:00
I did responsibly step down
1:02
from that, but nobody
1:03
stepped up to take over
1:06
the maintenance of that snap. But
1:09
it was a snap of OBS Studio,
1:11
including a whole plethora
1:13
of plugins that made it a very
1:17
comprehensive tool for doing any kind
1:19
of live streaming
1:20
or screen capture. I
1:23
inherited this from Popey, because Popey
1:26
did the initial hard work of adding
1:28
the OBS browser support
1:30
into the snap of OBS
1:32
Studio, which basically made
1:34
it an extremely usable tool.
1:38
Long story short, due
1:40
to the stupid stuff I do
1:42
in my live streams, the confined
1:45
nature of the snap wasn't working for me
1:47
anymore. So I needed to seek out other options.
1:50
I tried a number of different things, and whilst
1:52
I was still running Ubuntu, I
1:54
started a project called OBS Studio
1:57
Portable, which was an entirely
1:59
new project.
1:59
highly built from source version of OBS
2:03
with all of the plugins
2:05
built in clean containers and
2:07
distributed as a tarball but it was
2:09
enabled in what's called OBS portable
2:12
mode which means you could have multiple versions
2:15
of OBS studio installed
2:17
and running at the same time each with their
2:19
own discrete configuration which
2:22
was useful for me because I often needed
2:24
multiple versions of OBS running. I have
2:26
to say when you said installed you're
2:29
using the little bunny ears because
2:31
it's not installed as
2:33
such it's a tarball you unpack and dump in a folder.
2:35
Yes it's just a folder of all
2:38
of the things that make up OBS studio
2:40
in a directory and it keeps the
2:42
configuration directly adjacent
2:45
to the binary that's in that folder
2:47
so you can have multiple versions with different
2:49
configurations and scenes and all
2:51
the rest of it. Does that mean plunking multiple
2:54
copies of that in different places on your hard
2:56
drive and then whichever one you run it picks up its
2:58
own config right okay I'm
3:00
with you so far. Yep and it's quite
3:03
a niche use case but for example
3:05
sometimes I did like tutorials
3:07
on a live stream of how to configure
3:10
complex things in OBS studio and
3:12
that meant I could stream from one
3:14
copy of OBS and have a
3:17
separate copy which was a blank canvas
3:19
which I could actually use on stream
3:21
to do things with. Anyway
3:24
I now use NixOS so
3:27
some months ago I embarked
3:29
on a journey of bringing
3:32
all of these plugins and what-have-you
3:34
to NixOS which I have
3:36
done I have packaged some two dozen
3:38
OBS studio plugins for NixOS
3:41
and they have landed in Nix packages
3:43
and I've acquired my Nix
3:46
packages maintainer badges as a
3:48
result of that work but there
3:51
are some drawbacks with running OBS
3:53
studio on NixOS which
3:56
means it's not actually ideal
3:58
for what I want to do at the moment. And
4:00
it's one of these situations where if you're like
4:02
a subject matter expert in something,
4:05
you can then see the flaws in where it's
4:07
been maintained by somebody who is
4:09
not or a group of people who are not. So
4:12
some of the issues are OBS
4:15
Studio for this browser
4:17
source integration uses a technology
4:19
called SETH, which is in this
4:22
case the Chromium Embedded Framework,
4:24
which is in simple terms a
4:27
version of the Chromium browser that
4:29
enables you to use web technologies
4:31
inside of OBS Studio.
4:34
But OBS has a very specific ABI
4:37
requirement for the version of SETH it
4:39
supports. Now in Nix packages,
4:41
some clever people have patched OBS
4:45
in order to work with newer versions of SETH,
4:47
but just because it compiles doesn't mean
4:49
that it actually works correctly. So
4:52
a whole bunch of stuff that you need to do
4:54
just doesn't work and in fact will cause OBS
4:57
Studio to segfault. And similarly,
5:00
the higher quality audio
5:02
codecs which are technically linked
5:05
in the Nix packages aren't exposed correctly.
5:08
And there's a bunch of plugins which simply
5:10
do not work or cause OBS
5:12
Studio to segfault. I would hasten to add
5:15
none of the plugins I've added to Nix packages. Of
5:17
course, of course we wouldn't dare to add any of them.
5:20
So I've been on a streaming hiatus
5:23
since about May this year. Is
5:25
that because the package is broken? I've
5:27
been trying to get OBS Studio
5:30
in Nix packages up to where
5:32
I need it to be to support all of the stuff I
5:34
do. And I've upheld
5:36
my end of that, but I've still run into
5:38
a bunch of incompatibilities. And
5:41
the other issue is this, there's new plugins
5:43
coming out for OBS Studio all the time.
5:46
Almost in the last month, there's like four
5:49
or five really interesting plugins being
5:51
released that I'm already using.
5:54
And I'll get on to that in a moment that
5:56
I haven't had time to package in Nix
5:58
packages yet. And also the
6:00
speed of getting my PRs
6:03
merged in Nix packages has been
6:06
quite slow. I'm in a rather privileged
6:08
position that I can speak
6:10
to colleagues at work who have got
6:12
commit access to Nix packages and
6:15
sort of fast track my stuff. But
6:18
I don't like to do that. It's a bit like what
6:20
Mark was talking about a couple of episodes
6:22
ago in Moodle, where there's a whole
6:24
bunch of people that are Nix packages
6:27
maintainers and anyone
6:29
could do this. But because anyone could
6:31
do it, nobody does. It's
6:33
sort of that weird deadlock that happens.
6:36
Reminds me of the patch pilot thing
6:39
that used to happen in Ubuntu where you'd nominate someone
6:41
to do it on a rotor because otherwise
6:44
it falls through the cracks. Absolutely.
6:47
Maybe you need that. Absolutely. And
6:49
so Nix packages doesn't
6:51
have like a traditional maintainer
6:53
ship model over like a
6:56
package or group of packages
6:58
or like a domain like you would find in
7:00
sort of Debian where you've got things broadly
7:03
broken up to special interest
7:05
groups and then within that particular packages
7:08
within that special interest group. So
7:11
enter George Castro, friend of the
7:13
show, and his project
7:16
Universal Blue and the
7:18
ever amazing distro box.
7:21
So what I did is I dusted off the
7:24
OBS studio portable project
7:26
that I have been maintaining for a year
7:29
or so, which is this build of
7:31
OBS built against the Ubuntu.
7:34
And I said to George, hey, George, I've got this
7:36
working inside distro box on Nix
7:38
OS. This is pretty great. I've got access
7:40
to all of the stuff I want. Wait, wait, wait, wait,
7:43
wait.
7:43
You mentioned a bunch of things here. So you're on Nix
7:46
OS
7:47
and then you're running distro box on top of Nix
7:49
OS, which is probably a Nix package for distro
7:51
box. And inside that is
7:54
Ubuntu and inside that is a tarball
7:56
containing OBS
7:59
unpacked. and you just run it in there, right?
8:01
Is that what you're saying? Yes. You
8:03
have unraveled the inception perfectly.
8:06
When we say inside that
8:08
is Ubuntu, how much Ubuntu
8:11
is it? All of Ubuntu. All of
8:13
Ubuntu. So it's running an Ubuntu kernel
8:15
on top of Nix or is it a
8:18
container with some
8:20
Ubuntu packages or how much
8:22
is it? Right, yes indeed. So for
8:24
the uninitiated distro box
8:27
sits on top of either Docker
8:29
or Podman. So it's an
8:31
OCI container that's running
8:34
within distro box. So
8:36
for my initial proof of concept,
8:39
I had just a regular Ubuntu
8:41
container that I stood up inside
8:44
distro box. And then I downloaded
8:47
my tarball, Ovia
8:50
Studio portable, extracted
8:52
it, ran my little script
8:54
which satisfies all of the dependencies.
8:58
And then I ran my Ovia Studio
9:00
portable launcher and
9:03
it appeared and it worked and it was
9:05
all running at full speed. And in fact, you
9:08
can see me in this conversation
9:10
we're happening, not you dear listener, but my
9:13
co-hosts by way of Ovia
9:16
Studio portable running inside Nix OS,
9:18
this composited version of me that you see
9:21
is all running inside that container
9:23
right now. So in
9:25
simple terms, it's a Docker container
9:28
with Ovia Studio inside
9:31
it built for Ubuntu that
9:33
I can run on OBS. But the
9:36
real magic is I've got all
9:38
of the Nvidia hardware acceleration
9:40
working and the AMD
9:42
hardware acceleration working and Intel
9:45
and all of the other bits. Does
9:47
that hardware acceleration get passed through
9:49
from distro box through to the underlying
9:52
OS? Yes, it does. Yeah.
9:55
So Universal Blue has another
9:57
project called I think it's pronounced Bayes.
10:00
which is basically SteamOS
10:03
in a container. So it doesn't
10:05
matter what Linux distro
10:07
you're using, you can use
10:09
their container of Bayesite and
10:12
get this comprehensive
10:15
full SteamOS experience
10:17
entirely isolated inside this
10:19
container, which also updates
10:22
using the traditional sort of container
10:24
primitives. And what I've been able to
10:26
do with George and Kyle,
10:28
who is also instrumental in the Universal
10:31
Blues project, is do the
10:33
same for ABS. So
10:35
they've created inside
10:38
the UBlue OS GitHub organization,
10:41
a whole bunch of CI that ingests
10:44
my Ubuntu build and
10:46
creates this 1.6 gigabyte
10:49
container, which is Ubuntu
10:51
plus ABS studio and all of the gubbins.
10:55
And I can now run ABS studio
10:57
anywhere and so can you. So
11:00
it doesn't matter what Linux distribution
11:02
you're using now, if you're using Debian
11:04
stable and you want a current version
11:07
of ABS studio, you can
11:09
access it this way. If you're running
11:11
Ubuntu 2204 LTS,
11:14
which doesn't have the required libraries
11:17
to unlock some of the new features of ABS
11:19
studio, you can now run
11:21
ABS studio portable from this container,
11:24
because that's built against current Ubuntu
11:26
interim releases with all of the library
11:28
support for all of the current features. It
11:31
also runs on immutable distributions
11:34
such as Nix OS and Fedora Silver
11:36
Blue. So it really doesn't matter where you
11:38
want to run ABS studio
11:40
or SteamOS for that matter, and the whole
11:42
host of other stuff that Universal Blue provides,
11:45
you can run these things anywhere isolated,
11:48
and forever safe. I
11:51
feel like this should have been fixed with Flatback
11:53
and Snap, but it isn't, clearly.
11:56
So I have used the Flatback of OBS
11:58
studio and that's terrific and
12:01
it's the officially endorsed way to
12:03
get OBS Studio for Linux
12:06
from the upstream project. But
12:08
where I struggled is adding
12:10
support for the 50 or so plugins
12:13
that I require to that flat
12:15
pack is hard, read impossible.
12:18
So that
12:20
fell short for me and also these confined
12:23
technologies don't work so
12:25
great for how I would need to use OBS
12:28
Studio because I have all of these integrations
12:30
executing all sorts of arbitrary things
12:32
to control lighting and various
12:35
other peripherals. And
12:37
distrobox, although in a container, runs
12:40
as if it's natively running in your host
12:43
operating system. It opens up all the
12:45
access you need to get to everything.
12:47
So it's a pretty robust solution.
12:50
So I will have links in
12:53
the show notes to Universal
12:55
Blue, Bazeite because they may be interested
12:57
people wanting to play with SteamOS
13:00
in a container and also my
13:03
OBS Studio portable projects.
13:07
Linux Matters is part of the Late Night Linux
13:10
family. If you enjoy the show, please
13:12
consider supporting us and the rest of the Late Night
13:14
Linux team using the PayPal or Patreon
13:16
links at linuxmatters.sh slash
13:19
support. For five dollars a month on Patreon,
13:21
you can enjoy an ad-free feed of our show or for
13:24
ten dollars get access to all the Late Night
13:26
Linux shows ad-free. You can
13:28
get in touch with us via email show
13:31
at linuxmatters.sh or chat
13:33
with other listeners in our Telegram group. All
13:35
the details are at linuxmatters.sh slash
13:37
contact.
13:42
I have been updating Snaps for fun
13:44
and no profit. And how
13:46
much fun exactly? Yeah,
13:49
we'll get to that. It turns out
13:51
I currently have 62 Snaps registered to
13:54
my name in the Snap Store. Is that all
13:56
the Snaps in the Snap Store now? Oh,
13:58
me.
13:59
out there are over 5,000 snaps
14:03
in the snap store. Minus a bunch of test
14:05
snaps, minus some that don't work, and minus
14:07
a few others. So I
14:10
acquired a bunch
14:12
of snaps basically because
14:14
I thought, oh that would be good, I should snap that
14:16
and I snapped it and then I thought, oh that'd
14:18
be good, I'll snap that
14:20
and I've
14:21
eventually got lots of them.
14:23
When I left Canonical I'd kind
14:25
of been burned out by this, especially as I was
14:28
maintaining a whole bunch of my own ones, plus
14:31
some snap crafters ones as well, like
14:33
OBS and Discord and a whole bunch of others.
14:36
So I got a little bit burnt out and I didn't
14:39
rage quit, I stepped down gracefully I think
14:41
because I started a post on the forum and
14:44
saying could I please hand these over to someone and
14:47
basically nobody stood up for
14:49
most of them. I think about half a dozen
14:51
people took them but some
14:54
of them just weren't people interested
14:56
in maintaining them and I kind of
14:58
gave up on them a little bit, I can say I was a bit burnt out
15:00
by the whole thing. So some
15:02
of them I flipped to being private and
15:05
so nobody could install them and
15:07
over time a few people have nudged me and said,
15:09
hey could you update this or could you update that and
15:11
I've I've updated a few and then made
15:13
them public again because nobody else is going to maintain
15:16
them and sometimes I've been contacted
15:18
by upstream developers either
15:20
to say please could you update that or in
15:23
some cases please could you remove it because
15:26
either it doesn't work or it's outdated or
15:29
yeah for whatever reason and obviously I'm going to respect
15:31
the upstream developer when they say could you please remove
15:33
it so I just make it unlisted and stop it building
15:35
and remove all reference to it right.
15:38
But I had a spare weekend
15:40
recently where I thought I'll have a go
15:42
at attacking some of these and see
15:45
if I can get them to the point where they work, are
15:47
up to date and I can make them public so people
15:49
can enjoy these applications. What
15:52
was your turnaround in attitude
15:55
and motivation for doing that? That is a great
15:57
question. A lack
15:59
of hobbies. I'm
16:04
not sure. I think maybe taking
16:06
some time out from it, because there were so many
16:08
of them, and having the
16:11
Snapcrafters ones offloaded back to canonical
16:13
law, the community, meant I didn't have
16:15
to worry about those. And I was reduced
16:17
down to a much smaller subset of the ones I was
16:19
maintaining. So I think, and
16:22
the fact I could just pick them off one at a time, I haven't
16:24
made all of them public, there's a fair number of them
16:26
that are still broken or outdated. But
16:29
I thought I'd mention a few of them. And I wanted to mention
16:31
some of the challenges, and a
16:33
few specific things that made it challenging
16:36
and were part of the reason why I got
16:38
burnt out with it. And I'll come
16:40
to a conclusion at the end. So one of them,
16:43
Bomb Squad, which I
16:45
snapped because that was a game
16:47
that me and my son used to play
16:50
on the oo-ya when that first came
16:52
out. That's where I first saw that game.
16:55
And it was such a good sofa multiplayer
16:58
game. When there was
17:00
a desktop version, I thought I have to snap it. And
17:02
so snapped that, but it was
17:04
broken. So recently, I tried to update
17:07
it, and I had some challenges because
17:09
Bomb Squad packages its own Python
17:12
debug mode runtime thing so you
17:15
can poke at the system with a Python
17:17
command line. And none
17:20
of the versions of Python within the Ubuntu
17:22
repository were compatible
17:24
with it. And so it was a bit difficult to juggle
17:27
getting all the Python libraries running right. And
17:29
then I had a weird challenge in that the audio
17:31
stopped working. And then I had
17:34
a weird problem where the audio wouldn't
17:37
work the first time you launch the game. But
17:40
it would work the second time you launch the game.
17:42
And it was infuriating. If you remove
17:44
the snap, and then reinstall it, and
17:47
then run it, you get no audio, you
17:49
run it again, and it works fine. And
17:51
from that point onwards, it works fine. I
17:53
could not find out why that did not work. So
17:56
I replaced a whole bunch of code. I asked on the forum and
17:58
I got a solution, which was... was replace
18:01
that piece of code with this piece of code and it will work.
18:04
And it was very much like cargo
18:06
cult, copy, paste, pieces
18:08
of code from, you know, another
18:10
thing that works. I don't
18:13
fully understand why the old one didn't work and this
18:15
one does work. And that is a story that happens a
18:17
lot in SnapCraft, I find is
18:19
that there's a snippet of a yaml that
18:22
you see works for someone. And
18:24
so, right, well, I'll use that. And
18:26
I don't know if that's just me. I'm pretty sure
18:28
other people do that as well. Marcy, tell me something
18:31
else, does that. Yeah, yeah, I'm not, yeah,
18:33
for the benefit of the listener, I'm nodding along. Definitely,
18:36
SnapCraft was really born out
18:38
of cargo cult in good reference examples,
18:41
a lot of which Popi and I created when we
18:43
were at Canonical. And some of them don't
18:45
work anymore, yes. I
18:48
also found recently a relatively
18:50
new game. Well, I say
18:53
new, it's called Classic Cube. And
18:55
it's actually a whole cloth implementation
18:57
of Minecraft Classic. And
19:00
so I snapped that or I tried snapping it
19:02
a while ago and I couldn't get it working. And
19:05
I started on this back in June and I gave up. Is
19:07
this actually Minecraft re-implemented
19:10
or just a way to launch
19:12
Classic Minecraft? It's
19:14
a re-implementation. Wow. Yeah.
19:17
And it's fast and
19:19
designed to run on low-end hardware as well.
19:21
And I moved that, I updated
19:23
it to build on Ubuntu 2204, so
19:26
Core 22. And I
19:29
had to throw away the i386 builds because we don't
19:31
support that anymore, which is a bit of a shame. And
19:33
I had to do some real nonsense with the graphics
19:36
card because it worked
19:38
on my machine here, which is an Nvidia
19:40
card. And you would think that Snap
19:43
should just work on any machine. What it works on one
19:45
machine, it should work on any machine because they're all isolated,
19:47
right? Well, that's wrong. So it works
19:50
on my Nvidia. Perversely, it worked
19:52
on the proprietary driver but wouldn't work on
19:54
an Intel or AMD machine, which
19:56
was infuriating. And the
19:59
solution, I think, found in the Ubuntu
20:01
discourse. Now on the Snapcraft Forum there
20:03
was a document, a thread that was started by
20:05
one of the Snap developers, one of the maintainers,
20:08
that was documentation. But it was in the Ubuntu
20:10
Forum which I found really super weird. Why is it
20:13
there? Why are they not putting it in the Snapcraft Forum
20:15
or in the documentation? I don't understand.
20:17
But I found it and Cargo
20:20
Cult copy pasted it into my Snap
20:23
and it worked. So now I've got
20:25
Classic Cube works. So
20:27
that's another one that's now public and that works fine.
20:30
Another one that I've got is called B2 which
20:33
is a BBC Micro emulator. And
20:36
I was motivated to update that one because
20:39
I recently wrote a blog post about when
20:41
I wrote a virus for the BBC Micro many
20:44
years ago. So I was motivated to get the emulator
20:46
running so I could get screenshots and
20:49
I updated the Snap so that I could
20:51
take a screenshot for a blog post. And
20:54
so that Snap is now public. That's great.
20:56
That had similar problems as Classic Cube. It works on
20:58
some GPUs but not others. So I
21:00
copied and pasted the code from Classic Cube
21:03
to B2. Now it works.
21:05
I remember when we were working
21:07
on Snaps way back, that
21:10
multi GPU support
21:12
thing. It's very familiar
21:14
to me. It's nice to see that the
21:16
solution these days is a bit more
21:18
elegant in that Canonical
21:20
have now created what are called content
21:22
Snaps of the different graphical
21:25
driver stacks that
21:27
you can pull in as a sort
21:29
of a framework that you sit
21:31
on top of which once you
21:34
know that this is the new pattern makes
21:36
all of these problems go away. Yes. But
21:38
the problem is if you built your Snap on
21:41
Core 18, so up until 1804 and then you move it to 2004,
21:44
you have to update some libraries and
21:46
bits and bobs. And then when you update to
21:48
Core 22, it's
21:50
not just a bunch of libraries that change like the version
21:53
of, I don't know, libpango
21:55
or lib whatever changes.
21:59
There's also... Entire structural changes
22:01
to your YAML that make it quite
22:03
different. And I think what's missing
22:05
is these migration guides from
22:08
core 18 to core 20 and from core 20 to core 22. That's
22:10
what was missing in this whole process for
22:13
me anyway. And another one
22:15
was Session Desktop. Have you ever
22:18
heard of Session Desktop? Yes, no. It's
22:20
a crypto nonsense chat client
22:23
and it's built upon
22:25
the code for Signal Desktop. It's
22:28
called Session Desktop and it's crypto chat stuff.
22:31
I'm hand waving that away. And
22:33
I bumped that to core 20 because
22:35
it just stopped building one
22:37
day and I couldn't figure out what it was. And
22:40
it turns out that the upstream was
22:42
building one of their components using
22:44
GitHub Actions and GitHub
22:46
had moved their GitHub Actions bots
22:49
from Ubuntu 18.04 to Ubuntu 20.04. Oh
22:52
yes, I remember that happening. So
22:54
one of their components was building
22:57
now in 2004 and thus
22:59
wouldn't work in my 18.04 snap.
23:02
And so all I did was bump that to core 20 and then suddenly
23:04
Session Desktop started working again. So
23:07
I've got that published in public as well. So there's
23:09
still a few slightly broken
23:11
ones. I'm getting there though and I'm
23:13
spending a bit of time in the weekends and sometimes
23:15
in the evenings to try and fix these and update
23:18
them. And the conclusion I've come
23:20
to is I over
23:22
committed myself and I have all
23:24
these snaps that it's kind
23:26
of painful to maintain. And I've
23:29
learned from Martin the joy that
23:32
is GitHub Actions. So I want to automate
23:34
a lot more of this so I don't have to do stuff
23:36
manually. But what I'd also like to
23:38
see is when you go to the
23:41
Ubuntu Summit, Martin, can you bring up the idea
23:43
of maybe having migration guides and better documentation
23:46
for Snapcraft? Because stumbling
23:48
upon documentation in the wrong
23:50
forum is not the right
23:52
way for us to be documenting,
23:55
I say us, for them to be
23:57
documenting the product.
25:59
I'm going to carry on doing it, but I'm
26:02
probably not going to try and package
26:05
the whole world like I used to.
26:10
Alan, you wrote a blog post not on
26:12
Go about some old phones, didn't you? Yes,
26:16
I did. That got me thinking about
26:18
mobile gaming, because my
26:21
experience of mobile gaming these days is
26:23
that you install a game on Android,
26:26
and it's either some
26:28
sort of malware trying to sniff all of
26:30
the data off your phone, or some
26:32
sort of pay-to-win micro-payment
26:34
scheme. Or both. Or both. And
26:37
they're generally not that fun. But there were gamers
26:39
before this on mobiles, weren't there? There was
26:41
this thing called J2ME. Oh my
26:43
gosh. Which was a mobile, well,
26:46
it wasn't specifically for mobile, but it was the embedded
26:48
version of Java, which before
26:51
we had smartphones, was basically how
26:54
you got apps on a phone. And
26:57
so I thought,
26:58
well, I wonder, I never really played any
27:00
games on my phone back then. I remember
27:03
I installed my first Twitter client that
27:05
I installed back when sort of
27:07
the way to use Twitter on your phone was via SMS,
27:10
was a J2ME app. So I definitely had phones
27:12
that did it. But I don't remember ever playing
27:14
any games. So I went searching
27:17
for whether, firstly, whether
27:19
you could play J2ME games
27:21
on a modern phone. And secondly, if
27:24
there are any decent J2ME games out there.
27:28
And surprisingly, I found the answer to both was
27:30
yes. Oh wow. Yeah.
27:33
So
27:34
on Android, I was looking in the FDroid
27:37
open source app store, and
27:39
there is an app in there called J2ME Loader, which
27:42
you basically give it a JAR file of
27:44
a J2ME app and it launches it and gives
27:46
you a virtual dumb phone
27:49
number pad to control it with. And
27:51
works surprisingly well. You can
27:54
give it different, like, tweet the screen resolution,
27:57
so not all apps expect to run on
27:59
J2ME.
29:59
of all, here's all of the games that were
30:02
written for this platform, whatever, and some
30:04
of them have good information about what resolution
30:06
particular J2ME games were designed to run
30:09
at. So that's useful in configuring
30:11
J2ME Loader. But
30:13
yeah, once I was disappointed with all these Elder Scrolls games,
30:16
I just sort of started having a look around
30:18
for what else was available. And did
30:21
you know that
30:22
there were two Doom RPG games?
30:25
I was not aware of that. No,
30:27
just two. I'm shocked. They
30:29
were released shortly after Doom 3
30:32
was released for the PC. And
30:34
they are sort of the old style graphics
30:37
of Doom in a turn-based
30:40
dungeon crawler style RPG. Wait,
30:43
the contemporary time of Doom 3
30:45
was J2ME phones. Yes.
30:48
Wow. Mad, isn't it? I
30:50
think we would chalk up episode 14 as
30:54
the timeline for
30:56
Mark is old. This
30:58
is retro gaming for me. These
31:01
weren't actually really good playable games. I
31:03
think they are actually really good playable games. Doom
31:06
RPG, the first one, is a bit on
31:08
the cheesy side, very
31:10
sort of fourth-wall breaking, like nudging
31:13
a wink from the developer that you're playing a game
31:15
kind of thing. But at the same time,
31:17
it's a decent Doom game. You're running around
31:19
picking up weapons, and the combat
31:21
is obviously very different because it's turn-based.
31:23
But there's a decent amount of tactics because
31:26
the closer you are to an enemy, the
31:29
more damage you do, the more likely you are to hit.
31:31
And so it's worth getting close to them, but
31:34
then they're more likely to attack you.
31:36
So you might want to wait in a certain
31:38
position and draw them to you and things like that.
31:41
And yeah, plenty of exploration and finding
31:43
secret rooms, just like in normal Doom. And
31:46
that's really good. But then Doom 2 RPG,
31:48
actually, I was kind of blown away to think
31:51
about that it would run on the kind of devices
31:53
it was meant to because the animation is really
31:55
smooth and you've got sort of pseudo 3D
31:57
effects of it, like warping as you look.
32:00
down at the floor and it's actually
32:03
mightily impressive for the time I have to say.
32:05
Are they colour? Oh, yeah. I've just
32:07
got like Game Boy graphics in
32:10
my mind here at the moment. If
32:12
you just saw a screenshot of it you would say that's
32:15
Doom 2. Right. Java wasn't
32:17
the era of black and white televisions Martin.
32:20
No, but the phones of that era were not
32:22
great. I don't know. Yeah, but they had
32:25
colour screens. We're not talking about the Nokia 3310.
32:28
We're talking about the 6680 and the 6610, that kind of era. Yeah.
32:33
I think just slightly better though. I'll
32:35
tell you what though, some nice additions to the Doom
32:37
universe I have to say are the fire extinguisher
32:40
and the pet dog. I've no idea what that's
32:42
about. So yeah, new weapons you can use.
32:45
You can now wield a fire extinguisher and
32:47
you can capture the demon dogs
32:50
and walk around with them on a leash. Brilliant.
32:54
Have you considered installing any of these on
32:57
your Steam Deck? Ha ha ha ha. Funny
32:59
you should mention that. So yes,
33:01
following our previous discussion about Retro Deck I installed
33:03
Retro Deck and I found there was in fact
33:06
in the ROMS directory a J2ME
33:08
folder. No. No. So
33:10
I thought, ah, excellent. I'll give this a go. So
33:13
I plonked one of the jars in there and launched it.
33:15
It came up in the Retro Deck launcher and I selected
33:18
my game and I got a nice red
33:20
text on grey screen message saying,
33:23
J2ME supported in progress. Please
33:25
try again later. I
33:28
hear that Retro Deck 0.72
33:30
was released just a few days ago. So
33:33
maybe it'll work now. Oh my gosh.
33:35
Watch this space.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More