Namely passion, curiosity and probably not having much more other hobbies beside programming or hacking stuff around.
I recently went to try to improve a Linux kernel input device driver for a USB headphone: adding unit tests (whose execution is nearly instant). I have learned a ton of things about Linux development, C (I don't know C at all), input devices driver system (hid), the USB protocol and my device specifications.
I have never managed to boot it live to test with my actual device. That is despite spending probably despite spending probably 40 hours including a 10pm - 4am session on a Saturday night. But I had lot of fun doing it and I think that was the point.
I guess you can't beat passion and curiosity.
I guess in my case, I had to find a hobby that was not exactly like work, even if it was work-adjacent.
When I was more junior, or not doing programming as a full time job, I was more motivated to work on personal projects. Now I am more senior and programming/managing people full time, I can't get motivated to work on code-related projects in my downtime. It sucks :/
I just use my free time to code. I see it as a relaxing activity
In terms of where to find the time, there are 24 hours in the day, at least 8 for working the 9-5.
Personal projects are often embedded coding of some sort, though I spent some time poking at the PS3 firmware when that was first cracked too.
Spending months reversing and emulating a console… that takes dedication I don’t have though. I guess these guys are really itchy? Or it’s in a really hard to reach spot?
I think keeping a schedule that way has prevented me from every souring on programming in my free time.