The differences are:
- my understanding is that pf module is written in C and runs in kernel mode.
- my understanding is that pf os detection uses old p0f (2.x series) (not sure if it matters though)
- here, you have code in readable python that produces sandboxed bpf - which makes it actually useful.
Is it more complex? Well, you decide. Is kernel mode C "more complex" than p0f-to-bpf compiler in python?