LiquidPlayer / LiquidCore

Node.js virtual machine for Android and iOS
MIT License
1.01k stars 127 forks source link

Update to v12 LTS #161

Closed okhiroyuki closed 4 years ago

okhiroyuki commented 4 years ago

Nice to meet you. I feel that your development is great.

I have a question. This project is using Node.js from v10 LTS, is an update to v12 LTS a milestone in the future? I'm interested in this update myself.

Also, how to build libnode.so is going to be maintained in the future?

ericwlange commented 4 years ago

Hi @okhiroyuki,

Glad you like the project. I only just upgraded to v10 LTS from v8 LTS a few months ago! I do not have a current timeframe for moving to v12 LTS. For Android, this is a lot of work, but manageable. It is iOS that concerns me because JavaScriptCore is not advancing at the same rate as V8. For instance, in v10, node makes use of BigInt. If you scroll down to the compatibility table, you will see that it is not available on "Safari for iOS". To work around that, I had to polyfill it, but it is unfortunately not a perfect replacement. Same goes for SharedArrayBuffer. This one I have not polyfilled. Fortunately most native modules don't use it. But the further we move ahead, the more incompatibilities I expect until Apple catches up. So from that perspective, I have been intentionally a little behind the state-of-the-art.

At some point, however, I will take a look at it. But I would like v0.7.x to stabilize first.

As for libnode.so, it is no longer used in LiquidCore. Now I only use the static V8 libraries. Instead, node and its other dependencies are built directly inside of LiquidCore from source. I never liked the idea of having prebuilt binaries. It feels like a scary security hole. However, I have not found a way to build V8 directly yet in the build process. There are several reasons for this, but snapshots play an outsized role. I do most of my development work on a Mac. In Catalina, Apple dropped support for 32-bit processors. But to build the snapshots for older ARM and x86 Android devices, this is required. So my workaround has been to open Ubuntu in a VirtualBox and build the 32-bit libraries from there. It is a massive hack and I really do not like it. So I haven't really documented it. I want to find a better way.

Out of curiosity, what features in v12 do you need?

okhiroyuki commented 4 years ago

@ericwlange Thank you for your very kind reply.

I was interested to see what would happen if LTS support expired.

Now I understand that I am not using libnode.so, I am using a static library. And I realized at the same time that I don't understand this project, and I want to work on that in the future.

Once again, thank you for answering my naive question.