Tech Over Tea - Joys Of Porting Factorio To Linux | Raiguard
Episode Date: July 12, 2024Have you ever wondered why a lot of games don't get ported to Linux, well part of that might be the challenges in dealing with the platform especially when certain projects want to bend the standa...rds in weird and annoying ways. You may recall Raiguard from his blog post I covered a while back on the Factorio blog about the challenges of porting Factorio the Linux along with the struggles of supporting Wayland. ==========Support The Channel========== ► Patreon: https://www.patreon.com/brodierobertson ► Paypal: https://www.paypal.me/BrodieRobertsonVideo ► Amazon USA: https://amzn.to/3d5gykF ► Other Methods: https://cointr.ee/brodierobertson ==========Guest Links========== Factorio Website: https://factorio.com/ Website: https://raiguard.me/ Github: https://github.com/raiguard Mod Page: https://mods.factorio.com/user/raiguard Twitch: https://www.twitch.tv/raiguard ==========Support The Show========== ► Patreon: https://www.patreon.com/brodierobertson ► Paypal: https://www.paypal.me/BrodieRobertsonVideo ► Amazon USA: https://amzn.to/3d5gykF ► Other Methods: https://cointr.ee/brodierobertson =========Video Platforms========== 🎥 YouTube: https://www.youtube.com/channel/UCBq5p-xOla8xhnrbhu8AIAg =========Audio Release========= 🎵 RSS: https://anchor.fm/s/149fd51c/podcast/rss 🎵 Apple Podcast:https://podcasts.apple.com/us/podcast/tech-over-tea/id1501727953 🎵 Spotify: https://open.spotify.com/show/3IfFpfzlLo7OPsEnl4gbdM 🎵 Google Podcast: https://www.google.com/podcasts?feed=aHR0cHM6Ly9hbmNob3IuZm0vcy8xNDlmZDUxYy9wb2RjYXN0L3Jzcw== 🎵 Anchor: https://anchor.fm/tech-over-tea ==========Social Media========== 🎤 Discord:https://discord.gg/PkMRVn9 🐦 Twitter: https://twitter.com/TechOverTeaShow 📷 Instagram: https://www.instagram.com/techovertea/ 🌐 Mastodon:https://mastodon.social/web/accounts/1093345 ==========Credits========== 🎨 Channel Art: All my art has was created by Supercozman https://twitter.com/Supercozman https://www.instagram.com/supercozman_draws/ DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase we may receive a small commission or other compensation.
Transcript
Discussion (0)
Good morning, good day, and good evening.
I'm, as always, your host, Brodie Robertson.
And today, we have someone on who I'm sure is going to get me in trouble
with some of the stuff that we talk about a bit later.
Welcome to the show, Rygard, from the Factorio team.
You may recognize him from the article that I talked about a few weeks ago
where he was talking about improving support for Wayland
but he's also been involved in Factorio modding that is what he did before he was working there
and if you go to his github you will find his dot files uh repo and he's very clearly a Linux user
if you look at some of the applications he has in the dot files repo so welcome to the show
oh thank you for having me it's a pleasure to be here.
Absolute pleasure to have you.
So I guess if you want to just explain
more about your background,
anything that I might have skipped over there,
if you feel like that was a reasonable enough
like base explanation.
Yeah.
I mean, my name is Caleb,
otherwise known as Redguard.
I've been working for the Factorio team
for just a bit over a year now.
I'm primarily focused on the Linux supportio team for just a bit over a year now. I primarily
focus on the Linux support as well as the core engine development. Okay, fair enough. So I guess
probably the best place to start is sort of how did you get yourself involved in Linux in the
first place? Yeah, that's a bit of an interesting story.
Everyone has their story about how they switched to Linux originally,
whether it be, oh, I got tired of Microsoft's ads being pushed on me or yada yada.
For me, it was a little bit different.
My initial drive into Linux was actually because I wanted
to use the Catcoon text editor.
Have you heard of Catcoon before?
Yes, I have.
I had planned to do a video on that ages back, but I don't think i've ever got around to it yeah you should it's it's an
interesting editor um it does not support windows because it relies on a bunch of unix and posix
specific things uh specifically posix it requires a posix environment to work because of the way
it's designed and windows is not a posix environment so i yeah i switched to linux because of that what did you
when did that happen it happened uh oh gosh uh 2020 yeah 2020 2020 okay were you aware of linux
before that and just hadn't tried it out? Or was it like you were just discovering it then?
I was aware of Linux before that.
I didn't want to use it because I thought I wanted to play games.
But as it turns out, I don't play many PC games.
You just make mods and make games instead.
Yeah, well, the thing with me is I tend to get hyper focused on one thing at a time
when i was a teenager it was minecraft and then when i was 17 i found factorio and it's been a
love love relationship ever since so what was the uh the first distro that you actually swapped to
the first one i tried was zorin os because it looked nice. It's based on Ubuntu.
But that didn't last for very long. I eventually switched to Manjaro
because I also thought it looked cool. And then
the first time Manjaro broke on me, I
switched to Arch. And only
recently did I switch away from
Arch to Fedora.
Okay, so is it
Fedora Gnome, Fedora KDE? What do you want?
It's Fedora Gome uh because i like
gnome's built-in apps more like they're cleaner but i'm actually considering switching to all
the kde ones just because gnome so well not yeah yeah i i we're definitely gonna get more into that
a bit later but i do want to say that i do like the polish that you know has i i think
their app ux is really nice and i think the desktop is really well polished it's the problem
is the the stuff that's like not present that is the issue precisely i love the way i love the theme
that they have going on uh but i don't like how restrictive it is so like I use Sway myself and the nomaps kind of there's a
lot of jank around that that I have I have to like have a script that imports all the gtk settings
because it doesn't work properly stuff like that so you mentioned that you swapped because of
cocoon how did you even become aware of that application then if you were a windows user
was it like a random YouTube video you saw?
I think it was a... Shoot, what's his
name?
I can't remember the guy's name. There was a YouTube video I saw
about Catcoon.
I feel bad for him. Oh, DistroTube.
Oh, okay. DistroTube, four years
ago, made... Oh, yeah, I guess that lines up.
Four years ago, he made a video about
Catcoon. And I'd been interested in Linux for a while, but I really wanted to try this years ago made oh yeah i guess that lines up four years ago he made a video about cacoon and i'd
been interested in linux for a while but i really wanted to try this weird text editor so i said
well may as well jump ship well on that note then are you actually still using cacoon or do you
use something else every day okay i use it for work hmm i i think you were the first cacoon user
i've actually run across
there's not many of us, the Discord server has like 200 people
in it
what actually sold you on that then?
I kind of want to hear more about this text editor
the tagline
of it is it's Vim but
backwards, so in Vim you have C-I-W
for change inside word or change
around word, yada yada, you have the
verb and then noun.
Catcoon is the other way around. You have the noun and then verb. So you can essentially think
of it as Vim, but always in visual mode. So instead of CIW, you do alt I W C.
Okay. Okay. And what that allows you to do is it allows you to refine your selection before you
commit to
changing something so for example you can select the whole document then you can press s which uh
selects sub selections within your selection so you can type like s and then search for all
occurrences of the the word and then you hit enter and then you can change those but if that's not
exactly what you wanted you can undo your selection and do something else and it's all very visual and interactive so what sort of language interaction like tooling exists around cacoon
because i know like vim's been really developed for a long time you can get a lot of nice things
working but i don't actually know what the ecosystem around cacoon is like the cacoon
ecosystem is not nearly as big as you might imagine. It's very niche.
There is a very well-made LSP integration, which is pretty much all I need.
So I use the Kaccoon, I use the LSP.
There's also a bunch of other things.
If you've heard of the Primogen's Harpoon plugin for Neovin, I made a Kaccoon version
of that because I really liked how it worked and I wanted it for myself but other than that it's usually just it's usually the plain experience for me
what does that that plugin do because I've not used it it allows you to pin certain files so
for example if I'm adding a new entity to Factorio I can pin the entities class file
then I can pin like the Lua definitions class file uh and then i can quickly switch
between them using alt 1 and 2 and 3 and 4 and stuff like that so it's it just lets you pin
certain buffers to a convenient hotkey so you can get back to where you were originally after you go
through a long go to definition chain huh okay that's very Yeah, that does make it sound like really really simple to use because I guess
Like you because I use vs code do my code stuff
I I use I use vs. I use vs code with a neo vim plug-in. So there you go. I forgive you
You can I guess do similar things in vs code because it does always show like all your tabs along the top,
but I guess having a very quick way to just find a hotkey to jump right back and forth actually would make that
considerably easier. I've always felt like I should probably sit down and actually
learn
NeoVim. Like, I know the
basics of it and I feel more comfortable when I'm editing in NeoVim, but I don't really use a lot of the additional functionality,
and I guess that's part of the reason why I never properly sat down and used Cacoon either.
Like, I don't know.
I totally get it.
I see people who are really big on editors like this, or like Emacs,
who have everything down to individual hotkeys
and know exactly what they need to press to do every single operation and it seems more
efficient.
It's just a matter of, you know, getting to the point where you don't have to think about
any of the syntax.
It's like, you know, when you get really familiar with a language, right, where you're like
a programming language, where you're no longer looking up,
what does this function mean?
What does this function take as arguments?
How do I use this?
What is this library?
What is that library?
You have an innate understanding
of how all these pieces fit together
and you can just hack on it
and not really think about it.
And I'm sure when you get an editor to that state as well,
it just becomes second nature for anything you want to do.
Precisely.
The whole idea is to decrease the amount of friction
between your brain and the code.
So in my case, the base setup is pretty good for that.
But for a lot of people, they want something where,
hey, I can click here to go here.
And I don't fault anyone for using the tool that suits them best like i'm not gonna be one of those people who says oh you have
to use catcoon everything else is garbage even though i made that joke earlier i wasn't serious
about it uh use whatever is the best tool for you and if you really want to try to get into these
more niche things like vim or emacs or catcoon then give it shot. How long did it take you to get comfortable with it?
I had used NeoVim for a couple months before, so the idea of a modal editor wasn't new,
but it definitely took some adjusting to get used to doing everything backwards.
Fortunately for Catcoon, it was designed very sensibly. Everything is very orthogonal
and makes sense. There's a lot of keys that are
mnemonic is the word i'm looking for and uh it's fairly consistent throughout the editor
one of my main complaints with vim that led me to like wanting to try catcoon was vim is mostly
mnemonic but there are a lot of things under the g key that you just have no idea what's going to
happen and it makes no sense and it's just a accumulation of cruft over the last several decades of work yeah that they can't get rid of because it would break everyone
well my favorite is my favorite bit of cruft with vim is the core bit of cruft hjknl people over the
years have come up with reasons why hjknl is so great you know home row and all that but the
original reason for it is because of the keyboard that Vi was, uh, was initially, was it, no, before Vi, no, no, no, it was Vi, okay,
yeah, Vi is the reason why the hotkeys exist, not EX or ED, yeah, so Vi was made on a keyboard
where the arrow keys were an alt key on HJK and L, and that's the reason why it's there,
because it made sense on that keyboard,
but people are just used to that now, that is the thing that you use Vim for, you know, everyone
knows Vim, HJKNL, and there's not really a reason to change it, now that people have got these other
reasons around it, but I guess that makes sense with the mnemonics as well, where you have the core mnemonics that make sense,
you know, change, you know, things like that.
But yeah, at some point you run out of keys to do mnemonics.
So it's kind of just like you have to fit them in there
wherever you can get them.
Yeah, precisely.
On another note, I just looked at my Catcoon configuration
and I just realized it's a thousand lines long,
so I guess I'm not using the vanilla after all.
There's a lot of plugins in here I forgot I had.
I need to do a rewrite, I guess.
Do you actually use the plugins
or do you not even remember what they were?
Oh no, now that I'm looking through them,
I forgot that they weren't a part of the editor.
Ah, okay. Like there's auto pairs auto pairs is not built into the editor but I have it oh okay yep
stuff like that yes well yeah it's go ahead I was gonna say that's that's one of the reasons why
it's always I always question whether or not you should use one of these like
NeoVim distributions where you know they'll include a bunch of additional plugins a bunch
of different configurations by default rather than starting from something from scratch and
then building up from there because if you are starting with a big distribution it can be hard to
differentiate what is NeoVim or in Kakoon's case, what is Kakoon
and what is something additional added to it.
And there's nothing wrong with using additional things.
I use plugins when I was using NeoVim fairly actively.
It's just, if you want to start modifying things,
it's pretty important to know where things are actually coming from.
Exactly.
And like I said before,
uh,
use the tool that's best for you.
Not the thing that you think is the coolest.
I switched from arch to fedora because I was sick of setting things up from
scratch every time I wanted things to just work.
That is a,
you know,
that's a fair enough reason.
I get that.
That said,
I still uninstall, like I I don't uninstall GNOME,
but I disable it and switch to Sway instead
because I just can't live without Sway anymore.
Yeah.
Okay, that's fair enough.
So when did you say you got into Factorio?
Factorio I got into in 2017.
It was right after a pretty major alpha release.
The story there is all of my older
brothers, I have five of them,
were into Factorio
at the time, and they were doing a LAN party for this
new release, and I was looking at them and I said,
this looks like a fun
game. So they
went and downloaded one of the DRM-free copies
from our website and put it on my computer,
and I joined their LAN game and played it for way
too long. That was how I got into the game game so for anyone who is unaware of what Factorio is um
I guess just briefly explain it and like what what the goal is in the game for sure Factorio
is a automation game it actually ended up spawning an entire genre of games uh the goal of the game is you're
stranded on an alien planet and you are trying to build a rocket to escape the planet and but in
order to do that rockets are very complicated you need to build a factory to be able to build the
rocket so you start from scratch with raw resources and you have to keep building up technology chains
and getting to the point where you can make like low density structures and plastics and then
eventually get yourself into orbit i like to describe factorio as less of a game nor of a
graphical flow chart i've seen that in other places oh actually i think it was from your
video that i watched because i've got the uh i've got the 2016 gameplay trailer open right now and
well don't watch that one uh it was one of the ones linked on the website so that's when i clicked um what hold on what there's the 2016 one and the 2020 trailer on the home page of the
website huh i guess we never updated that i'll ask someone to do that uh we have a newer one
that's the same trailer but it looks better okay let's see if we can find the new one then uh this is just be trailer 2021 i think uh factorio 1.0 launch
trailer uh the one right next to that uh trailer 2020 maybe that yeah i'm okay 2020 this is okay
yeah it was 2020 sorry my bad no it's all good it's all good um yeah, I, I look at this game, like, this looks really cool, but I, it hurts my brain to look at it for too long.
Like, I don't, I, I get it, right?
Like, if you, you're supposed to break it down into little pieces and it'll make sense, but, yeah, like, there's, there's just a lot going on
one of my favorite youtube videos is a video that likens factorio to software engineering
and that is a very apt comparison because factorio is like software engineering but you don't have
to deal with any of the bad stuff you just get to build your factory and refactor whatever you want
and there's no deadlines it's it's it's great yeah factorio teaches you
software engineering seriously i think that's the video you're talking about yes i think that's the
exact one where like does stuff with like spaghetti noodles and stuff it's pretty good i think it's a
really cool game right like i it's it's really cool that like a whole sort of genre spawned off
of it yeah it's incredible right like i get it's not my my kind of game i think
it's really cool well i mean we have a free demo so if anyone's interested in trying it out
we can find it on our website maybe i'll actually sit down and properly try to learn the game at
some point or i'll just i don't know if you if you value your productivity you probably shouldn't
No, if you value your productivity, you probably shouldn't.
I've kind of separated out my gaming time and my work time.
Like I don't usually play any games during the week.
It's only on the weekend that I do it.
And I guess it depends on like what you want to do with your life and all that.
But for me, doing that sort of separation works.
Yeah, I mean, this game is so addictive that we even have in our terms of service
a line that says,
we are especially not responsible
if you stay up all night playing Factorio
and miss your work or school deadlines.
Because this game is notorious for being addictive.
I know firsthand how addictive it can be.
Yeah, you got so addicted
that you started getting into modding.
Yeah, actually, that's a great segue to that.
After two years of playing the game uh
there were some things that i really didn't like about the game so i was like hey this game has a
modding api let's see if i can fix some of the problems so i started modding in 2019 uh and now
i've made two dozen mods because i just can't stop so i guess what what what guess what did you want to change with mods? Like what did you feel like was missing or
should have been added? Yeah, just generally what sort of mods do you have that are available?
Most of my mods are quality of life and utility mods. For example, one of them is called train
groups, which means when you set a schedule on a train,
you can add it to a group,
and any other trains in that group will get the same schedule,
and any modifications will apply to all of them.
That's just a quality of life feature,
because you could do the same thing by copy-pasting the schedule between all your trains,
but it's a lot less convenient.
So it's a really nice way to just be able to bulk do things like that.
And fortunately, in the upcoming update,
train groups are now part of the base game, so it's going to be available for everybody it's things
like that things that make the game easier less friction uh are most of the mods that i've made
right right i'm seeing things in here like uh one from three years ago better alert arrows cursor enhancements task lists uh pipe visualizer a stat
gui is is is there still another stat gui in the game because that seems like a pretty
uh we haven't added anything like that no you can get the you can get the uh same information
through the console like just slash evolution or something like that but this just makes it
available all the time okay so yeah it's pretty much just all like making it i don't know if i'd say the easier
is the correct like way i would describe but definitely less friction for sure i i do think
quality of life stuff is always important um there's a i guess it'd be hard it can be hard to see what quality of life stuff is important.
Like, if you're developing the game, right,
you have a very deep understanding of how the game works.
It's the same thing with any other software, right?
You have a deep understanding of all of the intricacies of how things fit together.
So it can be kind of hard to see where the rough edges are,
because you know to avoid those rough edges just innately,
because, you know, you are so familiar with the code base.
So it's always useful to have someone who, at that time,
I guess you were outside of the development of the game,
who can sort of see it from a different perspective.
Yeah, for sure. That's been a really great boon for having such a good modding integration.
I firmly believe that if we didn't have such a good modding API, Factorio would not be relevant
today. Because the game is fun by itself, but there's a lot of content mods that extend the
replayability to practically infinite heights.
There are some people I'm watching on Twitch that have games of giant mod packs that are going for a thousand plus hours on a single game.
It can get quite ridiculous.
Well, that's the same thing.
You mentioned that you got really addicted to playing Minecraft when you were a teenager.
It's the same thing with that, where there is a really good base game there,
but there's only so much in the game.
And when you've played that enough times, you know,
unless your entire goal is just building fancy things,
and I guess, you know, the same thing applies to Vectoria,
building more and more optimized supply chains.
But at some point, you know, you want to do more.
You want there to be a further tech tree to go down.
You want there to be different routes you can take to get there.
And the same thing applies to Minecraft,
where because it has such a powerful modding community
and powerful modding API,
it's allowed that game to really stay not just relevant but
as massive as it's always been in some cases that game's bigger than it ever was oh yeah i think
minecraft's the single biggest video game ever made it definitely sold the most copies but you
know i don't know what their like current player count is they don't publish those numbers i don't
pay attention anymore judging by i know during during covid things popped up like really high with like minecraft youtube oh yeah covid i
mean covid wrecked a lot of things uh in a lot of ways that we could spend an hour talking about
that by itself but but it definitely made uh and if you existed in a digital environment for a lot of things, especially games and media, like a lot of those, because people just had a lot more free time, there were a lot more people trying things out and a lot of things just got suddenly a lot more popular.
that actually was a benefit for me is I wouldn't have this job if COVID hadn't happened. Because before COVID, Wubed, the company I worked for, was not very into remote work at all. They had,
I think, just one that I can recall, a person who was working remotely and everyone else was in the
office. But after COVID, we realized that remote work works fine for us. So I'm able to work for
them, even though they're in the czech
republic and i'm in the u.s uh i wouldn't have this job if that hadn't happened so there's silver
linings and everything so once you'd been modding for a while like how how did you move from that
to actually working at the company that makes the game? About nine months after I started modding,
I actually applied to get access to the Factorio source code.
This is a program that they offer
where if someone has good enough reasons and enough interest,
they can gain access to the source code
and be able to contribute things.
Not very many people get it
because you have to have pretty good reasons. But I said, hey, I'm here. I've made these mods. I want to add more modding
features so I can make better mods. May I have access to the source code? And they said yes.
So I've had access to the source code for many years before I got hired. And that was a big boon
for me getting hired because I'd already interacted with pretty much everyone at the company by then.
They already knew who I was. I'd already gotten familiar with the code base.
So when I sent them my resume, they said, okay. Like, wait, we didn't hire you already?
Yeah. That's another interesting story. My reason for applying to the company
was because their Linux developer had left. There was one person that was openly the Linux guy
who did all the Linux support stuff for many years,
but he eventually left the company to do other things.
And so I saw there was an opening,
even though there were no openings on the website,
I knew that they were lacking a Linux guy
and I didn't want the Linux support to go by the wayside.
So that's why I sent in my application.
So how long had they been without like a Linux developer?
Or was it just like basically right after that guy had left?
It wasn't right after.
I think they were without a Linux developer for a year,
but don't quote me on that.
I don't remember exactly when the previous guy left,
but it was definitely in the back of my mind that whole time.
I think the main reason I didn't do it immediately
was because of imposter syndrome.
And to be perfectly frank, I still suffer from imposter syndrome so yeah it took a little bit so during that period where they didn't have a linux developer were things starting to slide
or like what was what was happening or is if there's things you can't say obviously like
yeah you can ignore that i don't know we're fine um things weren't say, obviously, you can ignore that. No, we're fine.
Things weren't necessarily sliding,
but as you know, Linux is going through quite a bit of a revolution in recent years with Wayland and Pipewire
and all the other things that are starting to finally
become good enough to use for everyone.
But Factorio didn't have a dedicated guy
who could go through and actually make sure
all of these things were supported. So that's why I wanted wanted to do it because I have a laptop that has fractional
scaling on a screen and I couldn't play Factorio because on it without uh turning the screen
scaling down because it would be blurry right right well the reason I bring up it's sliding
is because like you know there is this whole issue with um dependencies
when you have native applications where you need to make sure things are actually lining up
correctly or things are going to start breaking and I know there are there are things like a lot
of things now that are statically linked um but you know there's always going to be some additional
issues that happen just because you're making a native application yeah for sure uh thankfully we've had pretty good
foresight our deployment servers use a pretty ancient version of dlc so you can even run
factorio on centos if you want to uh not that that matters anymore what is the minimum linux
requirement right now for factorio if you happen to know I don't know that off the top of my head, I'm sorry.
Okay, let's see if we can...
I can look and see what version glibc it requires though.
Yeah, if you know what that is, that would give us an indication.
Well, I'm just running LDD on it, so we'll see.
Uh...
Lib...
No, it doesn't tell me the version, sorry. I don't actually know.
But right now, you can pretty much run it on anything that is reasonably up to date okay well yeah i expect a reasonably up-to-date thing to work i
just wanted to know if you could run some like and also has all those dynamic dependencies right
right okay yeah that well that's obviously the the biggest thing um so okay you got the job doing Linux support.
And you were the Linux... You're just the Linux guy there now.
So you're basically, like...
How much...
I do want to ask, how much control do you have
over what happens on the Linux side?
I assume there's obviously somebody
that's keeping an eye on what's happening,
but how does this work for you? I assume there's obviously like somebody that's keeping an eye on what's happening, but like,
how, like, how, how does this work for you? I pretty much have full free reign over what I do
in terms of the Linux support. Obviously we do have some sort of organizational method. We have
a big Trello board where we have all the tasks we need to do. And I'm expected to be working on
those tasks. But one one thing i think my favorite
thing about working at this company is we're also encouraged to work on anything we see fit for the
benefit of the game so for me that includes the linux support uh so i am able to dedicate
time to that whenever i want basically so is linux support your main role or is that
just one of your additional roles?
I'd say it's one of my primary responsibilities.
We don't really have roles at the company.
It's a very flat structure.
I'm just a game programmer and all of us programmers share that same Trello board,
but we all have our specialties.
For example, if someone has an issue with Linux, it goes to me usually to if someone has an issue with linux it
goes to me usually right right if someone has issue with sounds it goes to daniani someone
has issues with the nintendo switch version it goes to twinson but uh overall there's not like a
hey you're just doing these things it's hey do whatever we need you to do uh unless you need
help with from someone else then you can ask right okay
because i know in earlier posts you have discussed um like working on modding stuff as well yes i
think i forgot to mention that uh i didn't mention it because i haven't been able to do that much
i've been so busy with my linux and game engine side of the programming that i haven't had much
time to dedicate to the modding support uh
in recent months but that is something i intend to get back to once our uh expansion pack is
released oh that's cool so with the um with the whole modding sport is there like difficulty
that's that was really bad for us are there difficulties with making sure it works consistently
across each of the operating systems?
Because I know that you guys support...
There's a bunch of things you guys support now.
Obviously, the Switch version is not going to have it,
but Linux, Windows, and macOS.
Is there issues with making sure the mods are working consistently,
or has it been abstracted
out enough where it's mostly fine and doesn't need additional work?
I'd say the modding API does add a lot of difficulty overall.
In terms of platform support, the biggest hurdle was actually ARM versus x86.
Because when you get on the low level, there's a lot of small differences.
For example, I might be getting these backwards,
so correct me in the comments if I'm wrong,
but one of the platforms will,
when you overflow an integer,
will wrap around to zero.
The other platform will clamp it to the max value.
So because Factorio is a deterministic game,
everything has to match 100% between all clients
or they get desynchronized
and it kicks you out of a multiplayer game.
So we had to go through a lot of pain
to make sure that all of the overflow...
What's the word for it?
All the times overflow can happen,
we check them and we apply our custom code
to make it the same on all platforms.
Because otherwise you wouldn't be able to play multiplayer
with someone on a different architecture.
So that's all stuff handled within like the modding API itself.
That's all stuff handled on the C++ side.
In terms of mods,
mods have no access to the platform at all.
They're completely sandboxed.
They only have access to the stuff that we give them
and that's all completely platform independent.
Okay, okay.
That was going to be my next question.
I apologize.
I kind of rambled on a bit.
No, no, it's all good.
Ramble as much as you want.
It means I talk less.
I was going to ask if I was writing a mod,
would I need to worry about the different platforms
or am I just targeting the specific game?
No, you don't need to worry about the platforms.
All you need to worry about is making sure that you do the same thing on every client uh so as long as
you don't do anything particularly stupid you're you're okay okay okay that makes sense i wasn't
sure how like how i guess powerful and how well developed the api was but that definitely
definitely uh makes things considerably easier.
Yeah, one thing that's useful to know is there's two different kinds of modding.
Minecraft modding is basically a source code hack.
They add their own source code on top of the Minecraft source code.
Factorio's modding is an official API, so it's all within Lua scripts, and they can't access the C++ portion at all.
They can't
change any of that behavior. So they're completely confined to what we allow them to do.
Okay. So there are certain things that are just simply not possible to interact with
using mods. Exactly. I guess that makes it a lot easier to ensure the multiplayer
functions correctly then. Yes. with minecraft mods can do
whatever they want so if someone writes a mod that removes everything on your hard drive then
nothing you can do about it but in factorio we just don't give you access to the hard disk you
can only require other lua files you can't even even read static text files or anything. That's all completely not accessible
to you.
Speaking of Lua, this is random
tangent, but I do want to bring it up because it is cool every time
I remember it.
With Super Giants games,
all of their Lua scripts
are just available in
the directory for their game.
So you can just read
all of those, modify.
It makes modding that game incredibly easy.
Yeah, that's the same with us.
All of the Lua scripts are packaged with the game,
but they're not obfuscated in any way.
Okay.
Does that mean including whatever comments are in there?
Because that's always fun to have a read of.
I don't think we have many uh actually
there's one particular one we have a we have a utility function in the core lua library that uh
has no purpose so someone wrote a comment above it up somewhere that says but why
i think it's my favorite comment in the code base it's always fun to see like whatever internal
discussions have been happening because they just didn't strip any of that stuff out yeah like the linux kernel is a good example
of this there is a website where uh it you can search for the use of specific terms over the
years and you'll see like the if you search terms like fuck or shit, like there'll be spikes at certain points.
Oh, have you seen the like Half-Life source code comments video?
No, I haven't.
That's the watching the dwindling sanity of Half-Life developers
or something like that through their source code comments.
It is an amazing video.
I'll definitely have to check that one out
also I just found that function I was talking
about and I actually was wrong
it's not a comment it's a log message
so every time someone uses this function
it puts into the game's log but why
that's even better
it's even better
there's a
um
what is it
is it the fast
yeah fast
inverse square root
where they've got
part of it
like part of the
known function is just commented out
as second iteration this can be removed like why does
this number exist what does this do yeah i think i remembered exactly uh tell me how close i am it's
uh uh evil floating point bit hack and then what the fuck yeah uh bit level hacking and then what
the fuck and then there's some weird math float i don't even know what's going on here then first iteration and
second iteration this can be removed and that's commented out yep that's classic classic software
development right there yeah it's as i said it's fun to be able to see like what's going on here like it gives you a
little bit of um insight into things i think a lot of people a lot of people like to take
themselves a little bit too seriously right like there's all it's it's nice to have a bit of fun
with it and it like yeah we're trying to make something good we're trying to make it all work but you know the people making it are people and
sometimes they you know are annoyed with something sometimes they have something funny to say
so it's always it's always nice to get a bit of insight into like what's going on there
yeah uh that is something that i emphasized a while back as well on in our community is uh
we are just people we try our best but at the end of the day,
there's only so much we can do.
And sometimes we take out our frustration in our comments.
So with the whole Linux support thing,
when you first got started there,
like what did you...
You had access to the source code already obviously but
had you looked at the linux support before then or were you just from that point considering okay
you know what can be improved here i didn't do much snooping around before i got the job. That's actually a bit of an interesting fact is I didn't really
know that much C++ when I got this job. I learned a lot on the job. And that's part of why I still
struggle with imposter syndrome. But I didn't do much snooping around the Linux code because I
didn't really know how much of it worked. I didn't know what was required. The important thing is that they told me was they didn't have anybody
that was willing to spend time on it. The best part about being a developer or the primary thing
about being a software developer is you don't know everything. You go read the documentation
and figure it out. Or you use Google or you use an AI or a combination of the above to help you with writing your code and that's a reality
that a lot of people don't realize until they actually get a software development job is in
university you're not allowed to use google on the job you use it all the time if you would joke
about like oh you know what would we do without stack overflow but yeah legitimately it's a very
useful resource.
Yes, there are certainly issues with directly copying code because of the
licensing stuff, but as a
like
you don't have to just learn
everything yourself. You can, right?
You can just read
even if you're reading books, right? You're still
learning from the experience of
somebody else who's done that.
Most people are not just going at a language and then blindly just writing things until it works.
You're going to build off of what other people know, what other people have done before, and
hopefully give yourself a quicker head start than the people that came before you.
Yeah, precisely. For the Wayland stuff specifically, I didn't have to do much
research into that because I almost immediately figured out that all we needed to do was
enable it in SDL. So fortunately for me, that was fairly easy, but I still needed to
go to SDL and figure out why it wasn't just working when I built it originally. And then that
led into figuring out about the Wayland protocols and that they're defined in XML files and that I
had to generate things with the Wayland scanner binary and went from there. You have to piece
things together. And being a platform support developer just means that you're willing to put
in the time to do that and that you have the ability to test that on your own devices yeah that's a that's a really big thing where it's so you'll
see a lot of a lot of games have and i don't fault developers for doing this but they'll go to some
third-party developer and then outsource their Linux support. And for a very brief period of time,
they have really good, really well-working game.
But because they've outsourced it and it was a one-time thing,
it then, you know, slowly starts to slide a bit.
They're not getting updates on the Linux side.
No one's testing the Linux side.
You're starting to see dependencies start to break.
And eventually you're in a situation where you pay for this Linux thing to be done.
And it works great if you're running on Ubuntu 12.04.
But we're on 24.04 now and everything is completely busted.
Precisely.
If you want to support a platform, you need to do it an ongoing support
you can't just do it one and done that's not how things work even on windows we constantly have
little things that break like windows 11 i don't have any specific examples because i don't work
on that but i'm sure some specific things broke with windows 11 and we have to continue to update the game. Yeah, Linux is just...
Because of how visible the dependencies are,
I think it's a lot easier to see exactly...
The regular user is going to notice a lot of things going wrong
because of how many other applications in their system
are going to be affected by these issues.
Whereas Windows...
It's a bit more obfuscated
right you install a windows update and some things change in the background what changed i don't know
what changed that is something that a lot of developers have echoed that i've seen on the
internet is linux to linux uh users are responsible for most of your bug reports but they also make
the best bug reports because they know exactly what their system is comprised of.
Is it similar in the case of Factorio then?
Yes.
There's some bug reports.
I actually have quite the stack of Linux bugs
that I'm sitting on that I need to fix,
but I need to get back to that fairly soon.
But all of them are usually like,
hey, here's my distro.
Here's my desktop
environment here's any weird garbage glibc versions i'm using uh it's usually pretty good in fact i
even have some people that give me core dumps which is really awesome which just is really
nice because i can see exactly what the memory state was when it crashed yeah that's, I guess because Linux users are just more used to having to make a bug report.
Most people have probably made at least a couple here and there.
Even if they haven't, they have probably seen a couple and have an understanding of what, like, what sort of stuff that you would be looking for from it. I assume you guys have some sort of... I don't know what your bug reporting system looks like
to the user who's reporting,
but I assume there's some sort of specific text boxes
for each section you want to be filled out.
Actually, no.
All of our bug reports are done on our forums,
and there's a bug report section,
and they just create a post.
And there's some bug report guidelines
that they have to follow,
but there's no hard-coded template that they need to do or anything.
Sometimes I wish there was, but there's not.
Right. Okay.
So they're just not looking at the existing bug reports,
and it kind of just...
Whatever happens, happens, I guess.
Yeah, there's a lot of manual maintenance of that for them.
That has to happen.
Yeah, and I'm sure with the Linux people,
if you do ask them for additional information,
it's probably a lot more of them are going to be familiar
with how to get that information
without having to be explicitly told
as opposed to on the Windows bug reports
where, again, most people just have never even considered
having to add additional information
they they might get a pop-up on some piece of software where their application crashes and it's
like what went wrong with the program and you're like i clicked this and it broke and that's pretty
much like what you you'll get i'm sure there are i'm i'm sure there are people on the windows side
who are writing good bug reports but i i can't imagine it's most of them.
Yeah, I mean, Windows doesn't really help you
because you get a blue screen and it says,
ah, snap, something went wrong.
We're generating debug files for you.
It doesn't say...
Well, actually, I guess Linux doesn't either.
It would just, you know, crash.
But yeah, I digress.
Well, at least with...
I assume if Factor factor crashes on linux it is going to dump some
log files somewhere yes uh it does keep it running log and we also do have automated
crash uploading uh crash reporting we have an internal tool for that which some people are
not going to be happy about but it's really nice because we can see exactly
when we did something stupid for example a couple months ago i made a simple bug fix in our uh
current version and then we released a patch and turns out i broke something pretty major so we
suddenly got a flood of like a thousand crash reports within an hour of or it wasn't that big
but it was pretty big of
like oh yeah we broke something we got to fix this and it gives us the stack trace obviously
all of the personal information is redacted uh before it's uploaded but it's it's a really nice
tool and uh i don't remember what the question was uh i was talking about uh logs yes it does keep the logs and uploads them and uh so we do get
pretty good information we also have some sort of custom stack trace generator i don't know how it
works but it gives us the exact stack trace whenever a crash happens regardless of how it
happened so it's pretty nice okay yeah so i guess you have a pretty good understanding of well
so i guess you have a pretty good understanding of well maybe not a good understanding but a a good set of information about how to find the bug if you had a good understanding of the bug
the bug probably wouldn't have been there in the first place right yeah usually with a bug report
if they upload their log file or if we get it to the automated system and they give us the
save file and the reproduction steps we can usually reproduce it and fix it okay yeah
so i i guess the the thing one thing i did want to ask you about is um so how much experience did
you have with c++ when you actually went in there and like what what was that experience learning it
basically on the job like yeah so i did have some experience via my source access before i had made some small
contributions but even to this day i'm not i've never built my own project in c++ i've only worked
on factorio so the other day i was actually on my twitch stream i was trying i was starting to build
a uh clone of the game osu uh the rhythm game yeah i want to make a small clone of that to like learn 2d
graphics and do all sorts other things and i had the task of i have to read the beatmap file which
is in a zip file i have no idea how to do that in c++ so lots of stack overflow and lots of
cpp reference was used because i just had no idea how to do that simple things just file io i had no
idea uh it's things like that i've been very spoiled by working on factoria because it's such was used because I just had no idea how to do that. Simple things, just file IO. I had no idea.
It's things like that.
I've been very spoiled by working on Factorio because it's such a well-maintained code base
and there's a lot of really good conveniences in it
that my experience with C++,
if I had to jump to another code base,
I'd take me a little bit to get up to speed.
Yeah.
How are you feeling now right like are you more confident working with c++ or at least i'm confident with the basics but i'm not the thing i'm weakest at is the build system
c++ well the lack of a build system is the better word for it i'm still don't really know how most of that
works because i haven't had to deal with it very much so that's definitely my weakest point okay
okay so with the with the wayland support like
wait okay you mentioned the whole fractional scaling thing i guess we probably talk about
that one so what actually was the issue with uh with scaling yeah uh on when you run something on x wayland at least on sway i don't know if this
is true on kde or gnome uh if you have fractional scaling enabled and you run something in x wayland
it doesn't actually scale it all it does is it blows up the window so it's at the lower resolution
as if it was 1.0 scale and it looks terrible.
So the reason,
the main reason I wanted to support with an Infectorio was so I could play it on my laptop at the 1.25 scale and not have it be blurry.
And okay.
I think that was,
yeah,
that was one of the things you included in the,
um,
the,
uh,
yes.
I, I, when I read that part, i didn't really understand what the issue was but now that you're explaining it that
actually makes sense why that screenshot was there because maybe maybe i just didn't understand it
when i read through it because you mentioned x11 on one side whale on one side and i was very i
was confused about why there was like a difference quality. I probably just misread it.
Yeah, it could have been better.
You can see under the screenshot that says
notice how the game renders at the display's native resolution
when running under Wayland.
That's basically the only mention I did.
There were a few things in that article
that could have been better.
Another misconception that a lot of people got
is that we were dropping X11 support,
so I had to clarify that on Hacker News and say, no, we're not dropping x11 support you don't have to worry i guess
so the wayland support was there when you got there already or was that something you added
no i added that uh sdl supports wayland uh but our build system was not set up to build it with
wayland support so that was my first task was to get up to build it with Wayland support. So that was my first task, was to
get SDL building with
Wayland support. So why did you actually
feel the need to add the Wayland support instead
of, you know, because most games
because most games are just running through Proton
they're still using ex-Wayland
even if they're running under Wayland.
Why did you feel the need to actually make it
natively run on Wayland?
Because of the screen scaling, mostly.
Okay.
That's the primary reason is the screen scaling
because it just looks so bad on my laptop.
Because I have a framework laptop and it has a high DPI screen.
And at one point it was way too small.
What is the resolution of that display?
Oh, I don't know off the top of my head,
but I can find out.
It's pretty big.
It's like almost...
It's like 1.5 times bigger than 1080p.
Hold on.
So like 1440p then?
It is 2256 by 1504 oh i thought it has a 16 by is it 16 by 10
display it's a it's a 3 by 2 oh okay it's like 1440p but slightly bigger than that right okay
okay but it's a really tiny 13 inch laptop so it's a pretty high density there yep yep yep okay that makes that makes
sense and why you definitely the scaling um yeah well yeah even honestly even i wouldn't
probably need the scaling at that i think anything 13 inches like 1080p is is already kind of rough
but anything more than that and yeah like if, if you get yourself, like, a
4K 13-inch laptop,
like, you're just gonna
run it at 4X scale.
Yeah, maybe not. Oh, no,
it's 2X, because it's two times each dimension
and then it's four times total.
I always forget that, too, but I
make a point. But, uh, yeah,
it's, uh, not usable at 1.0,
so I really wanted to be able to play
on my laptop and considering how much like little like elements there are on the screen i guess
like having that blurriness would just make it really unpleasant it wasn't unusable and the
game was perfectly playable that way i'm just very particular and i want things to look pretty
sure yeah if you want the game you just want the game to look how the game was perfectly playable that way. I'm just very particular and I want things to look pretty. Sure, yeah. If you want the game,
you just want the game to look how the game should look
instead of looking like you're looking through
like a blurry, a dirty shower screen or something.
Right, yeah.
And aside from that, it's also just because, you know,
Wayland, whether or not people like it,
Wayland is the future.
So if we want to continue our ongoing Linux support,
we need to support Wayland
because that's just the way Linux is going these days.
Yeah, it's going in that direction.
How long it's going to take?
Maybe we're the tortoise instead of the hare,
but it's going.
Yeah, well, I'll often hear people say things like,
oh, how is Wayland not ready?
It's been getting developed for 15 years
but X11 started
in 1984
I want to say 84
you were correct
yes
I keep saying every time
every time I think
of the year it started
literally 1984.
Yeah, X started in 1984.
X11 was 1987.
I just Googled it.
Ah, right, right, right.
Okay, yes, yes, yes.
So it's taken a bit of time to get here.
One of the things that people take for granted nowadays with X11
is the ability to hot plug monitors because that wasn't a thing
when like before I think Xorg sometime in the Xorg life I believe or maybe it
was late x3d6 but in the 90s you couldn't hot plug monitors on X11 you
had to plug the display in change your your config, reload Xorg, and then your display
is going to work.
That's incredible.
And that's if you don't light your display on fire by including some weird settings that
would break your CRT.
Right, yeah, because back in the good old days, when everything was a lot more manual.
Yeah, you mentioned the whole source code editing with Minecraft.
You don't want to have that level of control over an electronic.
Yeah, hey, faster frame rate hack.
Here you go.
Run this script that you downloaded.
Wait, there wasn't an internet yet,
but run this script that I gave you on this floppy disk
and then it just catches fire
yeah yeah luckily uh nowadays um you can't most of the there's like weird very weird edge cases on
badly made displays where you can damage things but most things it's just gonna black screen for
a bit and then be like hey you're stupid don't say don't do that setting yeah there's actually one time uh on the laptop i had before this one which
was an old dell one i got from my last job uh there was a kernel bug that was introduced that
made the display after i woke up from suspend on my laptop the display would flash black white and
then black and then it would like flicker and do all sorts of crazy things.
Turns out that
the bug was such that if you let
that go on for long enough, it would kill the
screen.
There was something like display synchronization
low level, really low level stuff
was going horribly wrong and it was putting
a lot of stress on the display hardware.
So, yeah, I had
to roll back to a previous kernel
to fix it so i didn't ask before but with your system do you have an amd or an nvidia gpu
uh right now i am running an amd gpu okay and i'm will forever because nvidia on linux just
no uh when i first switched to linux i had an rtx 2060 ti uh and i tried for a year like a straight
year i was on x11 i tried everything under the sun could not remove screen tearing it just i could
not make it work and back then nvidia and wayland just didn't work at all so i said i'm gonna buy
an amd gpu because i don't want to do a screen tearing anymore and i want to go on to wayland and i just can't do that with this card so it was
it was uh amd from then on yeah with the the screen tearing thing there was a i don't know
if it worked well but i think there was a way to make it happen with nvidia um amd there is
explicitly a setting in x11 uh it's something
like force composition pipeline yeah yeah something like that um it works at least from
my experience it was working quite well uh with the amd gpu on x11 um have you guys had any like nvidia specific bug reports with uh with linux then um not the i know oh actually there were
some that i can remember uh i don't have the details in front of me but there were some people
who were saying hey the game won't even start and it was nvidia and wayland and i said oh you're just
out of luck right now sorry it's not's not our fault. Ironically enough, we actually get more problems on AMD cards
because apparently AMD's OpenGL drivers are just complete garbage.
So we get a lot of weird one-off errors that we just can't fix
because the AMD's OpenGL drivers are questionable.
The solution to that is to switch to Vulkan,
but that's a whole thing in itself.
Yeah.
I don't really have any experience doing graphics development The solution to that is to switch to Vulcan, but that's a whole thing in itself. Yeah.
I don't really have an experience doing graphics development at that level.
I've done some, like,
basic game development stuff in Unity,
but that's pretty much it.
So if you guys wanted to add Vulcan support,
like, what would that actually entail?
I know, like, graphics isn't, like, your main thing,
but if there's anything you can explain there they'll be they'll be awesome yeah so we have
an abstraction over graphics backends because we support directx and opengl so we have we have an
interface that abstracts over both of them and then we have implementations for each so we would
just have to write the implementation for vulkan but as you might have heard online vulkan is
significantly more difficult to work with
than any other graphics library.
And that's because it was significantly lower level.
So it would be a lot of dedicated developer time.
And then we have the ongoing cost of fixing bugs and stuff.
We just haven't done that yet at this point.
So it's just a matter of... Well, it's not just a matter of adding it So it's just a matter of...
Well, it's not just a matter of adding it.
It's also a matter of then making sure
that as you add additional things,
the three different backends also...
I assume there's a different backend
on the macOS side?
No, actually macOS uses OpenGL.
Okay, okay.
Even though it's going to become a problem
because macOS doesn't support it anymore.
Well, they haven't properly supported it for a long time,
but they still have it.
They still have it, but they don't update it anymore,
as far as I know.
So we're stuck on an old OpenGL version.
Okay.
So what I was going to say there is
it's not just a matter of adding it
and making sure it works well.
It's making sure that all of them work consistently you don't have weird graphical bugs as you add new things in
right and like even though we have our good linux support the vast majority of our players on
windows and they're going to be using directx so the vast majority of our development resources
have gone into directx backend so the openGL backend is actually quite a bit slower than the DirectX one.
So the graphics don't perform as well on Linux as they do in Windows.
But the fortunate thing is that Factorio can run on a potato.
So it doesn't really make much of a practical difference.
Yeah, that is a nice thing about having a fairly light art style.
It's obviously...
You said that, but you'd be surprised
how much work goes into it.
What I mean is, like,
you're not trying to do hyper-realism or anything.
It's got a style
that works. The problem is you just have
lots of things going on.
Right. Actually, just
the blog post we put out last
week is the first time we've used
dynamic lighting in the entire game because up until now uh everything has been baked into the
sprites basically i mean there's been like you have lamps and it just makes the sprites brighter
or changes their lookup tables i don't know the exact details but now we're actually using normal
maps and all of the 3d lighting effects that you would see in a 3D game for our asteroids.
So that was a big jump for us.
That actually does sound really, really cool.
Yeah, it's awesome.
I had a blast reading that
because I'm not very well-versed in graphics programming.
It's something that I've been wanting to get into,
and I've actually started going through the Learn OpenGL book
to make my first 3D game. But it's a lot of fun and it's very difficult
learn open gl i don't think i've heard of that one
yeah it's learn open gl.com i really recommend okay okay
ah okay i okay i was just good i clicked on the book
and then I realized, wait, my Amazon's logged in.
Let's not show that.
Are you going to show your screen?
Yeah, I was going to show the actual
Amazon listing and then I
stepped back away from that.
There's five items in your cart. What could do that?
Well, it's less that. It's more about my uh my location because it will show like where it's going to ship to it's not like the
exact address but it will have like the suburb gotcha yeah i have i've not done a very good job
of protecting my online presence uh at one point i released a project that had the exact coordinates
of my house in it so yeah i'm kind of screwed i've moved since then but you
could easily trace where i live it's not that hard yeah the only time i've had something
bad like that happen is it wasn't my fault but there was a um what do you call it like a domain seller um what are they oh where they had a data leak and
yeah my luckily it was just addresses and nothing more than that but yeah there were people like
hey wouldn't it be funny if we sent pizzas to brody's house like no we be normal like what
are you doing that's i don't i don't understand that's that's
pro-social relationship at its finest yeah yeah a little bit but hey uh i moved since then as well
so it's good not a problem anymore the the one thing that was a real real dumb problem um i
so i have a dot files repo as well and i accidentally committed my um stream key at one
point oops luckily the person who so there was someone who saw it and started streaming on my
channel but what they streamed is a big black screen that was like hey brody your stream key
is public i was like i thank you for that i'll fix that that's hilarious at least it was a at least
it was a uh good samaritan yeah yeah since then if they were really a good samaritan they would
have just emailed you but you would think that but hey they wanted to have a bit of fun with it
anyway yeah speaking of which um my hold on i'm looking i actually think because of the way WL sunset works,
which is my screen dimmer,
I haven't found a way to make it use my current location.
So my approximate coordinates
are actually in my dot files right now.
Yep, right there.
Jesus Christ.
Yeah, maybe...
I need to see how accurate this is.
I'm not going to react to it, but...
Hopefully it's your capital.
Oh, thanks, Google, for removing the minus.
Oh, Google Maps can't even find it.
Okay, that's neat.
Sure.
Okay, well, I'm not going to worry about it.
Well, if it's based on your time zone it would be based on like your capital i would assume yeah probably um i just haven't found a way to make that work there's some things like there were
uh what was it called there was some like geolocation interface that should work but i
could never get it to run and i just gave up at
some point just hardcoded it i used to heavily use a uh a screen dimmer like back when i was on
windows but i don't know i just when i swapped to linux i just never bothered to set something up
and there are obviously there are things that do work on wayyland, depending on the specific backend you're using.
I just didn't really care to use it
for whatever reason.
Yeah.
I'm sorry. I'm a bit distracted by
trying to figure out where this coordinate is at this point, but
I can't... Whatever. I'll do it later.
I think I said it to the
state capital, but I don't know.
I don't know how to segue from that
neither do I we've talked about Wayland
there's some other things we could talk about there
there's something that I wanted to talk about in the blog post
that I didn't have room or time for
there's been some interesting bugs due to the way
Wayland is implemented.
So Wayland, when a screen or, sorry, when a window is obscured,
it lowers the rate at which it can submit frames.
So when your Factorio is full screen on your monitor,
it's 60 frames a second, no problem.
But as soon as you switch to another Sway workspace,
it throttles it to 20 frames a second.
And that's only because SDL implemented a workaround
to make that work.
Otherwise, it would throttle it, I don't know how low it goes,
like one a second.
But it's for power consumption reasons.
Yeah, yeah.
And obviously, in our game, our game is single,
well, it's not single threaded.
But the main update loop has to wait for the runner
to finish before it can keep processing the rest of the game so that's caused
problems if you're on a multiplayer server and you switch away from the game you'll get dropped
because you start falling behind it's really annoying fortunately there is a fix in the works
for that but it's taking several years and yeah it's been it's been quite a journey to wait for that fix i didn't realize that happened
uh is that wait yeah it's uh i because i let me just think about what i'm trying to say um
because when i i have obs open i guess I would have always had it on
a secondary screen, but it would still be
visible. Huh.
I know that KDE
does that. I didn't
know Sway did that as well.
Yeah, it's a fundamental Wayland thing.
Any Wayland compositor will throttle
windows that you can't see.
I don't know
how some get around it. I don't remember
doing that, but maybe I'm misremembering.
I think OBS
has a separate render thread,
so I think that doesn't affect them.
Well, I also would have someone have
a game that I tab out of
and I move to a different workspace.
I don't remember Hypaline doing that, but maybe
I could be misremembering.
I'll have to test Hyperland. Maybe they around it but like i said there are some works or fixes in the
works uh the sdl is going to get an event that will let us and that'll notify us when the window
is no longer visible so i can just stop rendering altogether uh which will be a much more efficient
but that's not there yet so right now if you if you run Factorio on Wayland, just don't hide it because then you'll get dropped.
That's really annoying.
It is very annoying.
Is that the only platform that has that issue?
Yes.
Okay.
Yeah, there's another example we can go to as well, something that only happens on Wayland.
Wayland has a fixed input buffer for every client.
And when the buffer overflows, the client gets killed.
So when Factorio is frozen and you move your mouse too much,
the game closes.
And Factorio freezes quite a bit, especially
if you place a gigantic Blueprint,
the game freezes while it processes that
because it's a single-threaded mostly game.
And so if I'm running it on Wayland,
I just have to not touch my mouse
because otherwise the game will just turn off.
It's really annoying.
Is there some way that can be worked around?
Sorry, what?
I was going to say,
is there some way that can be worked around? Sorry, what? I was going to say, is there some way that can be worked around?
Or is that just like a fundamental issue?
It was a fundamental issue.
Just like a month ago, they finally merged a change
that will make the input buffer resize automatically
on the server side.
I don't know if that'll fix it automatically for us
because I haven't tested it yet,
but I'm hoping that it will.
Yeah, these are the kinds of things.
Like I said, you have to keep ongoing platform support,
especially with Wayland
because there's a lot of issues that came up
after I added the support that I never would have expected.
Well, I guess that is the one nice thing about supporting X11,
because X11 is basically dead.
At least that part of it doesn't really change.
Yes, it's very stable.
Yes, Debian's also stable.
Running three-year-old dependencies is quite stable.
Mm-hmm.
Like, oh, you have a version of X.Org
within the last 10 years, you're fine.
Actually, I think you might be right. Pretty much
all that's happened is
like some bug
fixes. I'm sure there's been at least a couple
of minor...
Actually, I guess variable
refresh rate's probably been added in the last 10
years. That's probably the only major feature I can think of.
I didn't even know Xorg supported that.
That's cool.
It does.
It's jank.
It doesn't work properly.
I think it only works properly on a single monitor.
I mean, I can't use it either because right now on Sway,
even though it supports VRR, theoretically,
if you move your mouse, it hops right back up to the max refresh rate.
And it's been an open bug report for years, and they just haven't fixed it because it's not a
high priority huh and i don't blame them like the thing to remember especially with all the people
who say oh wayland's taken 10 plus years to come out people are doing this a lot of people are
doing this on their own free time yep yep so you can only expect so much yeah that being said when there are people who are actively doing things that make things worse
um there are issues there uh obviously the thing i the the first thing i want to bring up is the
one that you've talked about is the client-side and server-side decoration thing.
My issue with that is...
They agree...
Did they agree to the spec?
I'm thinking of DRM leasing.
They definitely didn't oppose the spec initially.
And there were patch sets to get server-side decorations implemented in GNOME.
And it's just...
Okay, for any... I've explained this a million times before.
For anyone who hasn't heard my rant before,
so client-side decorations are when
the application window is responsible
for drawing the decorations of the window.
So that being things like the header bar,
where it has your close icon, full screen, things like that.
You might have the title of the window, you might have an icon for the window
depending on the desktop you're doing.
Client-side decorations means that the application,
every single application that wants to have those things there
has to draw them itself.
Whereas server-side decorations mean that the desktop is responsible for adding them.
There are benefits to having server-side decorations mean that the desktop is responsible for adding them. There are benefits to having service-side decorations
because it allows you to integrate things into the header bar.
If you look at a lot of GNOME applications, for example,
they have their hamburger menu in the actual header bar.
If you look at something like Steam, it has a custom header bar
where it integrates nicely into the rest of the application.
Spotify, they have a lot of their account settings in their header bar where it integrates nicely into the rest of the application. Spotify, they have a lot of their
account settings in their header bar.
It works, it's nice, and if developers want to have it, it's really nice to have as an option.
But there are some cases where
it just doesn't make sense to have to add them yourself. Good example is games.
But another good example is, let's say you are doing a Python scientific nonsense, whatever.
And you want to show some sort of graph.
And that graph appears in a window.
You are responsible for making sure the header bar of that window is drawn.
You're just trying to show
a graph on the screen like that that is not at all relevant to what you're doing
exactly and in our case uh when we initially came out with the wayland support
the one of the first bug reports that came in and said hey i'm on wayland i'm using gnome
uh the game is not doesn't have a title bar. Please fix. And I was
like, okay, well, maybe this is just some weird thing, or maybe we just need to update SDL. I
don't know. But then I looked into it, and yeah, GNOME does not render service-side decorations.
If your client does not provide decorations, there are none. So I got fairly annoyed by this,
because I'm like, hey hey we're a video game
on other platforms regardless of the implementation details i'm looking at you reddit
um on other platforms we don't have to worry about it uh we just submit our game's frame buffer and
the the when the windows libraries or the coco libraries they do everything for us they have
the title bar uh gnome on wayland is the only desktop environment and the only place in the world where we have to
worry about this problem. And it was quite annoying because of that. Unfortunately,
the fix wasn't that difficult. We just had to bring in another dependency.
But the dependency also doesn't work correctly because it doesn't follow the uh
gtk4 theme so yeah it's been an adventure i will say though before uh i hand it back to brody is uh
i was very displeased with the amount of toxicity i saw on this on reddit especially after i uh
posted this and it got spread around the news or spread around the internet. There were a lot of people who were borderline personally attacking the GNOME devs and that's
never okay. I have problems with GNOME. I don't have problems with the people. Everyone is a
person. They're doing what they think is best. So please don't attack them.
Yeah. I think if people take that, like if they take it way too far, right.
You know, I like to be very critical of what the GNOME devs are doing, right. I think if people take that, like, they take it way too far, right? You know, I like to be very critical of what the Gnome Devs are doing, right?
I think that the way they're handling this is actively detrimental to not just their desktop,
but, like, application developers who are trying to support Weyland.
But that does not mean you should go out of your way and, like, send them DMs and rant about...
Just be a normal person.
How difficult is it to just be a normal person on social media?
And it's fine to be critical of it and bring this up as an issue,
and that's fine.
But the second you're going to be doing personal attacks,
you've crossed a line.
Just stop doing that.
Yeah.
And I might have...
I don't know.
The tone that I took in the blog post was fairly harsh.
Excuse me.
I even said, in their infinite wisdom, as you pointed out.
I might have gotten that from you, actually.
I'm not sure, though.
But yeah, it's never OK to victimize.
It's never OK to take things too far.
So please be nice.
That being said, I do wish that GNOME would see the light.
And even though it's not technically
required by whatever protocol or specification is,
please do service that
decoration, because you are the most popular desktop environment. And every barrier there is
to native Linux support for games especially is another barrier to people not making native Linux
applications. We have to come together and try to make things as simple as possible. And that's not
to say we should copy every bad design decision from Windows. But we have to make things as simple as possible and that's not to say we should copy every bad design decision from windows but we have to make it as seamless as possible and this is just
even though in this specific circumstance it's not that big of a deal to fix it's just one more thing
yeah i don't know what the deal is with lib decor not using the um gtk theme correctly that seems
like an issue on their side yeah the thing with libdecor is even though it's just one dependency, it also has its own
dependencies. And with SDL, we don't have to link against libdecor because SDL links it at runtime.
But for simpler applications, if you want to just draw a graph and you just want to submit your
OpenGL framebuffer with your graph, but then instead you have to bring in libdecor and pangokyro
and all these other things to draw the title bar.
And it adds a lot of complexity.
It shifts the burden of that complexity
from the desktop environment to the clients.
Yeah.
Where it gets also really weird,
I assume that Factorial uses a relatively modern version of
SDL? Yes.
Our 1.1 version is a few versions
outdated now, but our Master Branch,
our 2.0 version, is on the latest version.
So I know someone who is
developing a game in
an older LTS of Unity,
and that version doesn't
yet have proper
Wayland support developed.
I think the modern version, the newest version of Unity,
I think they have experimental Weyland support.
But on the solar version, if he wants to have window decorations,
he's going to have to develop that outside of the engine,
which is not a pleasant experience to do with Unity.
It really does not want you to
break out of that environment right and that is a uh the shifting the burden of maintenance on
the clients is not just isolated to this incident uh there's another problem well the the problem
with the input buffer overflowing that i mentioned earlier, the initial response I saw from Wayland developers is, why isn't your input
on a separate thread?
That's the client's fault. And that is just,
it doesn't make me angry.
It just makes me frustrated because if you want Wayland
to be widely used, you have to be flexible enough
to allow all of the nonconforming clients to work to some degree.
Of course, you don't want to be like, oh, we need to support X11 natively.
I mean, X Wayland is amazing, and I'm grateful that they did that.
But things like, oh, why isn't your input on a separate thread?
We can't do that because SDL doesn't support that.
We would have to switch to a different low-level library and that would be a year plus worth of work.
So for us, it's just not feasible. And that attitude, while I get that they're trying to
avoid the pitfalls of X11, where X11 got so bad because they were doing what was beneficial for
them at the time and they didn't really think about the future very much that's how we got there to where we are today wayland's
taking that opposite approach but they sometimes take it too far by assuming that clients are going
to be well behaved and uh it took a long time for them to finally come around to uh resizing that
input buffer because they're like oh why aren't the clients behaving yeah a common thread i see is well just write the application better like why are you doing that
what is the purpose of like this functionality and that i get that question being asked but
when people are developing applications for windows and Mac OS or X11,
where certain things are just there and are expected to work,
you can't just then say, why did you ever do that?
Because Wayland is not just the small platform.
It's not just Linux being the small platform.
It's the small platform on the small platform it's not just Linux being the small platform it's the small platform on the small platform that is trying to dictate how the entire world
of software gets developed like a good example of this is the XDG top-level
icon discussion so this is a nightmare discussion for anyone who hasn't heard about this one the idea it's it's such a
basic thing you want to have a parent window that has an icon and then the child the child windows
having different icons than the parent so if it's something like a one of the examples used is um
libre pcb where you have your main section and then like different section
i don't know pcb terminology but different sections that are focused on different parts of the pcb
have their own specific icons and that's something that is just not possible under wayland and
for a couple of months there was actually it was like the first month there was a lot of
discussions about well do we even want the ability for windows to be able to set different icons why would you use
this what is the functionality of it are people going to abuse this feature are they going to use
this to pretend like they are windows for other applications and all of these are fair questions
but it doesn't change the fact that this is a method of design that has been used for a long time.
And even if Wayland says this is bad and no one should ever use it,
that's not going to stop anything because Windows still supports it,
Mac OS still supports it, X11 still supports it.
And you can't control what the rest of the world is doing
it and you can't control what the rest of the world is doing when you are the the minor the minority of the minority solution you're not like you're not internet explorer or google chrome at
its absolute height where you can control what the web is going to be doing you are less than
one percent of the development ecosystem.
Right, and then you have like the top 1%. We're the bottom 1%.
We have no say in how the wider ecosystem works.
And like I said, I understand where they're coming from,
but if you want Wayland to be usable on a wide scale,
it has to be more flexible.
Yeah, yeah.
I don't know what's going to happen with whaling because things are getting
very rough especially in that that top level icon discussion repo um because there's been some like
it's not just because that repo it's because of multiple years of discussions where
people are just like people are getting burnt out right? Like, there's so many issues that are getting stalled.
There's so many times that issues are getting rehashed.
And, like, I get it, right?
You know, you work five months on a protocol
and then, like, right near the end, it's,
hey, let's have a discussion about the things
we already talked about for five months already
Let's rehash them again
even though the result is gonna be exactly the same and
this goes back to what we're saying right the people who are working on this are people and a
lot of them are doing it in their free time and
when it seems like
the work you've been doing for all of these months is about to just go up in flames
because like a few people have issues that they don't want to let go of like it's it's like i
i look i for one wouldn't be able to keep my cool working in this repo. I'm very glad that the people who have voting rights in Weyland
are rational people
who
can step away when they need to step away.
Yeah, instead of letting it pile up
until they just hate
their own lives and just don't
let anything happen.
Yeah, yeah.
So, I guess, okay,
with the whole, the Wayland support in
Factorio, we've talked about the bad things, but
besides the whole fractional scaling thing
and making that work, like, what else has been
has been a positive
with not just supporting
Linux, but supporting
Wayland? I'd say
uh, hmm.
I don't know, the fractional scaling is pretty good but
some people have said that the game feels smoother and but i actually i don't really
know because i use wayland has inherent v-sync inside of it and that's there's like tearing
protocols that are now starting to go through finally that lets you get screen tearing back when you really need it uh but theoretically
it uses fewer resources but it's mostly just uh the same experience if you're on a 1.0 display scale
thing uh x wayland is so good that you're not going to notice half the time
like all proton games right now
run through X11, and you have
a great experience.
I'd say
the upsides, the reason why I focus so much
on the negative is because the positives
are a lot harder to see.
You know intellectually
that it's running through Wayland, and there's
the new stack. That makes me
happy. But for the end-user experience, on Factorio 1.1 especially, it's running through Wayland and there's like, oh, you have the new stack. And like, that makes me happy. But for the end user experience,
on Factorio 1.1 especially,
it's actually a detriment to your experience
in a lot of ways because of the input overflow issue
and the throttling when it's not out issue.
So I guess that's why I focus so much on the negative
because the positives, when it's working, it's great.
But there's still some glaring issues. So it's hard to keep that in mind.
Yeah.
The positives, then maybe not positives that are inherent to the Wayland platform.
Maybe they're positives over X11, but in a lot of cases, the things that are working
well are a lot less visible, right?
the things that are working well are a lot less visible right like if you're if things are good and it's working like it should be like if you know that it otherwise wouldn't be working maybe
a couple months ago then yeah you can definitely like oh hey look it's working now thanks uh
terran protocol for example um but other things where it just behaves like it would on other platforms.
I guess that's the,
it's not a,
a like exciting selling point,
but like the best selling point is it just works the way that it should be
working.
It just works.
Yeah.
Uh,
that pretty much sums it up.
Yeah.
It's,
I had a point and then I forgot it.
So now I'm stalling.
So with the whole tearing support thing,
what is your personal thoughts on having tearing there?
Because the discussion there was really weird
where initially developers were like,
why would you want tearing?
Like the whole point of this is perfect frames.
Like, you don't, nobody wants tearing.
Like, what's the point of that?
But I had been a supporter of the protocol from the start,
and I'm very glad that it actually got merged.
And I think the coolest thing about that discussion is
Simon Sir was the first one who commented on that,
being like, I don't understand why anybody would ever want this. but he was also the first person who ended up getting it implemented yeah i've had a
pretty good experience overall with the source hut guys uh like i use sway that's that's
circumference wayland compositor uh and i had used actually used sourceUp for a while and I liked my experience
with there but
I like the tearing protocol
because most of the time
you're right like most people aren't going to
notice a couple milliseconds but
I play osu!
I'm not like super high in the ranks
or anything but I play it at a high enough
level to be able to tell
when the vsync is causing lag so i've been
really looking forward to the tearing protocol because it will get rid of that much more latency
from where my cursor actually is to where i see it and especially when you get higher into that
game it can make an extreme amount of difference especially when you have like a 60 hertz monitor
16 milliseconds is a long time.
Especially if it's a 60 Hertz monitor for sure.
Yeah.
Like I have a 144 Hertz ultra wide that I'm using here,
but I play osu! on my laptop sometimes.
And I have to switch to i3 for that because the,
the,
the latency on sway is just too high.
Yeah.
I guess with like the regular desktop stuff,
right?
I think that's the,
I think this is a big, a big problem with a lot of the um the wayland discussion it's a problem and i i get how it happens right the people who are developing wayland a lot of
them are not like the regular linux users and that that makes sense because they're spending
all of their time writing C++ code
and writing XML files. Like, it makes sense
that you are a
very, very, I
guess,
how would you say it, like,
deep into the Linux ecosystem.
This is why a lot of, like, Fedora, for example,
they swapped default Wayland
back in...
God, like, 2017, I want to say.
Maybe even earlier.
How long ago?
Yeah, on the Gnome side on AMD GPUs.
Yeah, they swapped a long, long time back.
And back then, you couldn't screen capture.
Like, there was no screen capture support at all.
There was a lot of other things that were broken.
And just, it was not usable for a regular user let alone the nvidia stuff where
nvidia back then i don't think you could do gpu acceleration on x wayland like gaming was
impossible uh i mean that only recently landed yeah acceleration was my land i don't remember
how long ago it was but it's definitely relatively recent uh maybe in the past couple of years
i thought it was the past couple months months, but I could be wrong.
No, no, definitely, definitely longer than that.
Oh, no, I'm thinking, okay, no, I'm wrong.
You're right.
Explicit sync is the past couple of months.
Yeah, that's probably what I'm thinking of,
but I thought it was also the hardware acceleration
in general in X-Wayland.
Yeah, no, it's definitely,
you might be thinking of something else,
but it definitely wasn't there back in 2017.
And obviously I use AMD, so I don't actually know what the problems are.
Yeah, that's fair.
I do as well.
It just works for me.
Yeah, yeah.
I do as well, but I still like to keep an eye on what's going on.
But when that swap was made, it was not ready.
It was not ready at all.
But if you're a developer and your entire day consists of opening up element to look at matrix
opening up a browser and opening up a text editor wayland worked perfectly there was no issue at all
but yeah i mean for the users like it was a little rougher back then
yeah and i mean linux i mean hopefully especially with the windows co-pilot garbage that happened
recently uh we're probably going to see an influx of linux users and so the requirements that people
have for wayland to be usable for them is going to go up like for me i the lack of global hotkeys
is still really annoying for me because i only have one monitor so whenever i want to stream
i have to have obsBS on my screen.
In order to switch scenes and stuff.
It's just not a good experience.
There are workarounds for that.
Like the way that I do it on KDE is there's a thing called the Legacy X11 app support.
Which just lets you pass in your keys directly to X-Wayland applications.
And I run OBS through X-Wayland.
And it just does the thing
i suppose if it's using pipewire it would work just fine so what do you mean for screen sharing
i mean oh screen sharing yeah yeah that's gonna work um but the global hotkeys i guess a there
are some some workarounds you can do there is the um obs web socket cli so you could use that and then bind sway hotkeys to uh web socket commands
i actually did that last week as an experiment and it works but it feels bad okay yeah um another
option is there's a android app called obs blade which is also controlling over WebSockets, but is done from an external device.
Oh, that's cool.
I've been meaning to do a video on that for a long,
long time, but
yeah, the OBS WebSocket
API is gross.
There's a lot of things where I just
the app
so OBS Blade, it has
a section of things that works, and then it has an advanced
section where it's just a list of other like things that you can call.
And it's like,
I don't know what any of this stuff does using this may break OBS.
That's hilarious.
Yeah.
I,
uh,
I'm hoping that the global shortcuts portal lands sometime within my
lifetime.
That'd be nice.
The portal's weird because it's there upstream,
and I think KDE has their portal implementation.
GNOME doesn't yet.
But we also just don't have any applications that are using the portal or expecting the portal.
So you're in this weird chicken and egg situation
where you don't have the desktops adding it because nothing wants to use it but you don't have
anything wanting to use it because the desktops haven't added it right and like in the grand
scheme of things it's compared to other things it's not a huge priority so it's just going to
take a while it is a big deal in the case of screen readers, unless they decide to add in some sort of another API for screen readers.
Right.
But yeah, that's the main issue.
When it comes to things like push to talk in Discord working
or hotkeys in OBS, like, yeah, it's annoying,
but it's not a major, major deal.
But I think the accessibility argument
is a lot bigger of a selling point for most people
yeah i only recently found out that the accessibility situation in wayland is
garbage uh i don't have to worry about that thankfully because i have two arms and
functioning eyes and ears but uh uh for people who don't like it's just their lives are terrible
on wayland right now yeah the accessibility stuff is a big part of the reason
why Gnome hasn't actually dropped their X11 session completely.
They've made it not the default,
but it's still sticking around in a big part because of that.
Because if they drop it,
like, you are effectively just dropping all of those people.
Right. And there's only so much you can do fundamentally because correct me if i'm wrong uh excuse me as far as i'm aware the x11
protocol has things like draw a text and draw a box whereas wayland you're just submitting frame
buffers like the wayland compositor doesn't really know what the content
of the application is it just knows hey here's some pixels display them please so it's actually
it might end up being that applications have to implement accessibility features and not have it
be a part of the compositor which is going to be it's never going to happen to be honest like
there's always going to be applications that just won't do it. Yeah. Especially video games and stuff.
Yeah.
Well, there's also the whole issue with non-Latin text.
Where if you want to do, like, Japanese input or Korean input on Wayland, it does work. But it's very flaky between toolkits.
Where certain...
I think GNOME only supports IBUS, so if you
want to use anything else, then
um...
Yeah, you just can't type.
So it's not just
accessibility in that sense, it's accessibility
for people who don't
want to use their system in English, or can't
use their system in English.
Yeah.
It's a big problem.
And fortunately, there are people working on accessibility in Wayland,
but as always, it's a slow process.
Yeah, a lot of the accessibility stuff on Linux was funded by Sun back in the early 2000s.
And it sort of just stayed in that state for a long time.
It's been kind of hacked on a long time. It just, it's been like, you know,
kind of hacked on a little bit here and there.
But ever since that point,
it's never had a big dedicated development effort behind it
because like accessibility is very important,
but it's also a,
it's important for a small group of people, right?
Like a thing that's going to affect a lot more people
is getting, I don't know, screen tearing support done
or getting just, like, these basic, like, global hotkeys, right?
So it's super important for a small group,
but it's not, in the grand scheme of the desktop, a big focus.
Right, yeah. Because within our minority of linux users
the people who need accessibility features are an even smaller minority yeah and no matter how uh
virtuous your intentions are you only have so many hours and so many brain cells yeah so uh
like you have to allocate resources yeah that's that's a big problem with pretty much anything
that you want to do like there's always especially because as we've said like most people in linux are
volunteers and you know maybe you have it maybe you're in a lucky position where you have a job
where you can work on open source but that's just not that many people and even then those people
generally being paid for a specific task they They are being paid as a GNOME developer
to work on graphics support, they're being paid to work on a distro, they're being
paid to work on the Linux kernel, they're not being paid just to make random
commits to random things. A lot of those people do make commits to other things
as well, but like it is... it's a difficult thing to solve because ultimately they are going
to end up still doing stuff in their free time and there's only so much free time sadly it would
be nice if we all had multiple lives we could live at the same time and do a bunch more work but
it doesn't happen yeah i've felt that because i i have many Factorio mods and I have several other open source projects
for example I'm writing a Lua language server
because the ones that exist right now
are just not good enough
but that project is taking over
I've been sitting on it doing almost nothing for like 8 months
or 9 months, I just recently started working on the type system again
because I only have so many brain cells
I can allocate to programming in a day.
And now that I have a full-time job
where I'm working on a complicated C++ code base,
like two plus million lines,
once I'm done working,
the last thing I want to do is work more.
Right.
So my amount of anime watching
has gone significantly up in the last year
well you know what let's go let's go completely um completely side tangent then what are you
actually watching then uh right now i'm watching well right now i'm uh staying current on demon
slayer and konosuba uh my favorite show is free run i'm a basic guy. I like the top rated show on my anime list. It's great. It's so good.
I'm not like super into
I'm not like a super niche
weeb, but I like a lot of the
mainstream shows, although I still haven't watched Chainsaw
Man or Jujutsu Kaisen.
How did those ones skip your
I don't know.
I watched the first season of Jujutsu Kaisen and it was fun okay okay especially like i'm not gonna be like one of those people who
say oh you have to boycott things because of their working conditions but like i i already wasn't that
interested in jiu-jitsu kaisen season two and then when i heard about the hellish working conditions
they went through i'm just like no i'm just not gonna watch it that's fair and then chainsaw man i just i don't know i just never got around to it
yeah i i i'm watching all of that and a lot more um yeah i like your figure collection i probably
should yeah i've got a couple of things back a couple of things back there um yeah i probably Um, yeah, I probably should watch less, but I want to like my, my next, um, my next programming
goal is I want to, I want to start learning Rust.
I've been like, so Rust is weird for me because I've known about Rust and I've been talking
to people about Rust since the Rust beta.
There were people who were selling me on it back then, like, this is going to change the
way people do development. It's going to become such a big language this is when nobody was using rust
um and now you know rust is like google has adopted it for android development like in like
in their kernel level stuff um there is a bunch of other companies that are adopting it now we
have cosmic coming out which is a full rust based desktop which is just not something that was possible that long ago on on linux because
system 76 is a big part of the reason why there's even developed rust gui tooling like it existed
before but if you look at iced they are like a lot of the System76 guys are now like top
contributors on that project. Like they have brought that ecosystem so far forward.
So you were a Rust shill before it was cool. I wasn't a Rust shill. I was just aware of it. You
know, I was like you, uh, I, I knew about Linux way back when, and I just hadn't,
hadn't ever messed around with it. Right it right yeah i actually used rust for a year
uh for a lot of my side projects well two of them uh but i ended up dropping it in the end because
uh the limitations were bothering me and my development productivity was too low
and people will tell me that that's a skill issue and they're right i just i don't like rust very
much but everyone is different yeah Yeah, that's true.
Well, going back to C++,
how do you feel about C++?
Not just your experience with it,
because we touched on that before,
but how do you actually feel about the language itself?
I feel like if you stick to the same subset of it that actually makes sense,
like, oh, hey, you can have classes.
Oh, hey, you can overload some methods.
It's actually a really nice language to work with like i can express what i want to do
in a concise way a lot of the time and uh there are some things like the error messages are
horrible like it took me a long time to figure out that there's a specific one i'm thinking of where
uh the error message is something like cannot uh's no implicit copy constructor for this thing.
But the actual solution is to just dereference it.
Or no, the actual solution is to put const in front of it.
Because that's a const copy constructor, but not a non-const copy constructor.
It's just things like that.
copy constructor but not a non-const copy constructor uh it's just things like that uh but if you stick to the same subset of the language i feel like it's not that bad until
you have to actually build your program and then it's just terrible all around
so yeah i am i've gotten a lot better at it over the last year
so what is your your background programming actually like because obviously you did the vectorio modding but did you
have experience doing any coding before that or what was it like actually the majority of my
experiences in lua okay before i got into linux i made uh rainmeter skins uh for windows a rain
meter is like a desktop customization thing where you can get skins and uh you can put them on your
desktop i made a suite for that called modern gadgets you can actually still find it on my github but it's
archived now but it was fairly popular and uh the skin the skins themselves are ini files but you
also can use lua scripts to do fancier things so that was my initial foray into real programming
my experience up to then being Scratch.
So I went from Scratch to Lua for Rainmure skins.
Then I graduated to Lua for Factorio modding.
And then I did Rust.
And now I'm doing Rust and Go and a little bit of Python.
Although I don't really like Python.
But mainly C++ now.
So you learned to program in Scratch then?
Yes. Okay. when was that uh that was around 2009 so uh that was back when scratch was still a thing you had to install on your computer
you had to download the scratch editor to be able to make scratch programs uh that's where i learned
things like if statements and uh well it was, it was called forever if, but, uh, four loops and things like that.
Uh, and then my mind exploded when scratch 3.0 came out and you could define custom blocks
that do things, which is just functions.
Uh, that was amazing.
Uh, but that's what got me into programming.
And I actually made some pretty stuff.
I'm pretty proud of on scratch.
Uh, yeah, it's, it's it's fun it's i recommend scratch
if you will have kids that are interested in computers give that give them scratch like
expose them to it because it is a really great learning resource for programming for kids
especially i was completely unaware of things like scratch when i first started programming
it was definitely out because i would
have been what like 12 something like that 12 11 or 12 um but i my first experience with programming
was a um a thing called greenfoot so i'd say it is a java uh game library toolkit sort of thing um i was lucky enough to have in my high school a
programming class and we were using this to do our game development um now the funny thing about it
is the teacher who was running the class he he was not a very experienced programmer.
He just wanted to run the class,
but he was reading the textbook,
basically a chapter ahead of us for each class.
So whatever, so I came across like this thing called an enum.
And I was like, hey, how do enums work?
And he was like, I don't know what that is.
That's hilarious.
Yeah, I didn't have, well, actually, I did't know what that is. That's hilarious.
Yeah, I didn't have... Well, actually, I did have one programming class in high school.
I forgot about that, actually, where we used Java.
And I was the top of that class
because I'd already been doing Scratch for so long.
Whereas my classmates were struggling with if statements,
I was like, oh, these are easy
because Scratch had already taught me how they work.
That's why I really recommend Scratch because you don't have to worry about syntax you just drag and drop so once you figure out how like if statements and for loops work then all you need
to do is translate it to the text representation of the language that you're using and that's a
much smaller step than learning the fundamentals of how programming works. That's why Scratch is so beneficial.
Yeah, I kind of wish I had known about it when I was younger
and before I had gone to high school
because I probably would have really liked it then.
Because I always liked the idea of programming.
I didn't know...
I think the problem is knowing how to start,
knowing what to start with.
I know there's going to be someone out there
being like, I started programming with C.
Yeah.
Like, yeah, I don't care.
You guys are spoiled.
I started in assembly.
Oh, God.
Yeah.
Scratch is so good that even CS50,
the Harvard course,
starts them on Scratch for one week before they go into C.
So, like, they teach them C, but they actually start them on Scratch for a week first so that they can learn the very basic fundamentals.
Huh.
That's probably a really good idea, then.
Huh.
Yeah, it's incredible.
Like, I'm, like, being a shill for Scratch.
It's so good.
I guess it looks like a kid's toy, so it's, like, you know i'm like being a shill for scratch it's so good i guess it looks like a kid's toy so it's like you know i mean it is well yeah it is but it's it's a kid's toy that
has like a a really good like it's a really useful learning tool i guess and i guess if you want to
know like what's possible with it like go to the Scratch website, and they have a lot of really cool stuff
just being shown off on their homepage.
Yeah, I mean, people make some pretty incredible things.
The most incredible thing I made
was I made a little simulator
where there were these little people,
or these little robots that were eating sludge,
and they just randomly wandered through this area
and ate sludge until it was all gone.
I was really proud of that. But the people make full-on some people even made 3d games but the most impressive one i ever saw was someone made a fully functional platformer like
with a scrolling stage and everything it was it was truly amazing it's called scratch napped
like that was like that just blew my mind when i was a teenager it was like holy moly how did
not only how does this work in general but how do they do it in scratch like it's incredible yeah
and of course you wouldn't be surprised but there are multiple people who have written
doom in scratch because of course oh yeah of course i think that's that's that's super cool
like obviously that's not the intention of it. And
that's people who are just actually really good at programming who are like, I just want to go
back and use it. Um, but yeah, if you, I guess, yeah, if you, if you want to get started, it's
probably, there's probably worse ways to get started, right? Like I know a lot of people
who got started on Python. I know people have gotten started on c
but i guess if you want to just ignore i guess the syntax is probably the part that's probably
relatively scary to a lot of people like if you look at c plus plus like what like or like c right
what is a a what what is a reference and what is a pointer like why is there an asterisk here like
what is that supposed to mean? Like, it's not...
It makes sense if you understand the language,
but when you're getting started,
I guess that syntax can be kind of a barrier to entry.
Java is really bad for this as well.
Like, Java is very, very wordy with a lot of stuff.
Like, it has libraries upon libraries upon libraries just for
basic things like system.out.println just to do a printing a string and yeah yeah i mean it's better
than c++ where you have to do std colon colon c out left bracket left bracket your string left
bracket left bracket std and line just to print something. Yeah, anytime there's a, I look at a C++ tutorial,
I don't think anyone actually explains what that is.
They're just like, oh, just ignore that.
This is just how we do it.
Just don't think about it for now.
It's like in a lot of languages,
there's this really dumb metric
where like how small is the hello world program?
In C++, it's like one, two, two lines minimum.
Because you have to import Iostream first,
which has to be its own line.
And then you can do your main function and stdc, yada, yada.
Whereas in C, it's one line, because you can just do int main.
And then in your body, you just printf.
In Python, it's just print.
In Scratch, it's just say.
It's a really dumb metric, but it's kind of interesting to think about and then there's assembly where it's like okay well good
luck yeah we're all spoiled we have functions although i guess assembly has routines but i
don't really know much about assembly so yeah that would be a fun thing to play around with
at some point it's it's not going to be like a productive use of my time i'm never going to write assembly code
for anything actually useful but it would be nice to go and actually have a a core understanding of
how that stuff fits together oh yeah like one series i highly recommend is ben eater uh he
made an 8-bit breadboard computer from scratch uh including programming all of the opcodes and stuff
by programming them by
plugging in wires.
It is incredibly educational
about how computers actually work
at a fundamental level. I highly recommend it.
I will definitely
check that out if I have some time.
Yeah, and the reason I brought that up is because
he sells a kit where you can build
your own, and I really want to do that, but i just haven't gotten around to it because there's so
many things i want to do and so many brain cells only so many brain cells like i said before
so much to do so little time much to do yeah only 24 hours in a day it's not enough yeah that's uh
you know well there are you know we you're aware of leap seconds technically is a
little bit more depending on hey we also have the daylight savings so sometimes my sometimes my days
are an hour shorter or an hour longer for no good reason at all so much like it made sense back when
we were all farmers but now it doesn't really make sense anymore yeah yeah i guess so but
like oh the the problem isn't getting getting an extra hour it's losing the hour that's the problem
uh yeah uh spring forward is the worst fall back is great you get an extra hour of sleep
but spring forward is terrible well i don't usually i just
wake up my normal time anyways like hey it's seven o'clock instead of eight now what's going on
uh oh because i don't like i have everything just automatically change so you know i don't
think about it um yeah someone will usually mention it to me like at work like hey daylight
savings like oh yeah that's a thing isn't it i'm actually quite blessed in
that regard too because uh like for example i'm going to prague this weekend uh for a three-week
work trip and uh last year when i went i didn't have any jet lag whatsoever i somehow managed to
luck out in such a way that uh i managed to line everything up perfectly that i didn't suffer from
any jet lag but then recently we flew to Texas to watch the American Solar Eclipse.
And when I came home, it was like maybe a two hour flight and then only an hour of time difference.
But I was completely destroyed.
Like my body was not happy for several days after that.
So, yeah, it's really it's really fascinating how different people can be.
And especially even the same people can be and especially even
the same person can be different in different circumstances when it comes to your sleep
yeah i'm in australia so if i go to america it's gonna be like a 15 16 hour flight but because of
my time zone it's gonna be let's say i leave i left like 10 aam, it'll be like 12pm by the time I get there.
So things would just not make any sense.
I mean, you could line that up by sleeping on the airplane, but if you're someone
who can't sleep on the airplane then you're just hosed.
Yeah.
Yeah.
I do want to go to things like Fostum and Gwadek and things like that at some point in the future.
But it's also just expensive for me to get anywhere
because Australia.
Right.
Yeah, Australia is just so remote from everything.
Well, there's some things around you,
but most of the places where tech happens
are in Europe and America.
Yeah, we are getting developing tech scenes here.
We've had stuff in Sydney for a long time,
like PyConf happens in Australia, for example,
but we don't have any big Linux events here.
Yeah, I do want to go to FOSDEM at some point.
That sounds like fun.
I also want to go to GDC.
It's all just time commitment and money commitment.
Yeah, yeah.
Well, on the topic of time,
we are closing in on
the two hour mark already geez i was a little worried when we started this like how are we
gonna fill two hours but here we are yeah you know most people are kind of worried about it
and then they realize like they actually have a lot more to say and i don't know but as long as you're able to respond to questions with more than three words
uh usually it goes by pretty easily yeah and i definitely have a tendency to ramble so
like i wasn't even planning on talking about cocoon and then we did that for what like 20
minutes something like that yeah that's the uh that's what i was saying earlier before we started
i have these topics here i don't aim to hit them if we hit them that's good um but it seems like we pretty much hit
everything i wanted to actually mention by the looks of it nice go us um i think the only thing
we didn't bring up was the uh the whole sway flickering with rapidly changing images but
that's something that i really want to fix because
it doesn't really affect me, but it's just
so annoying.
Even when I'm in tiled mode
on Sway, when the
window first appears on the right half of my monitor,
it spazzes a little bit.
When I'm in Prague,
I'm going to work with our graphics guy and hopefully get that fixed.
Hopefully.
I don't know.
There's also real quick lightning round.
The SDL clipboard thing that I mentioned, like, oh, we're going to open source our software.
Yeah, someone beat me to the punch and already submitted a PR for that because I was taking too long.
Very nice.
Yeah.
At least someone got solved.
Open source is great.
Doesn't matter who solves it.
At least someone solved it.
Yeah, at least someone's solving it.
Awesome.
Well, I guess let people know where they can find you,
where they can find Factorio,
and anything else you want to direct people to.
Yeah, you can find Factorio on factorio.com.
I recommend buying from us because you get a Steam key anyway,
and then we get all the money.
But you can also find it on steam uh as for me
uh i'm ryguard you can find me on twitch twitch.tv slash ryguard i swim i stream occasionally not
very often uh especially in the next month i'm not gonna be streaming at all because i'll be away
but i'd love for you to hang out if you have some free time i also have a youtube channel
but i don't post anything to it you can find all of my links on my website,
rygaard.me.
Awesome.
Nothing else you want to mention?
That's pretty much it? No, thank you
so much for having me. It's been a pleasure.
Absolute pleasure. As for my stuff,
you know what,
we're going to start with that one. I have my gaming channel.
I stream twice a week there,
probably playing through Sekiro, and I might be doing a collab stream with ren we haven't decided on the game
yet this is uh i have a backlog so i don't know what will be happening by the time we uh get there
i have like four podcasts recorded ahead of this so i need to just stop for a little bit um yeah
the main channel is brody robertson i have uh linux videos going out there
six days a week check it out there's probably something on waylon probably something on various
other linux related things if you're listening to the audio version of this you can find the
video version on youtube at tech over t if you want to find the video uh wait if you want to
find the audio this outro is a mess if you want to find the audio, this outro is a mess. If you want to find the audio,
there is an RSS feed.
It's going to be on your favorite podcast platforms.
Put in your favorite app and you're going to be good to go.
Give it the final word.
How do you want to end this?
Well, keep on Linuxing
and have a good time.
Awesome.
See you guys later.