Here’s a JDM programmer for PIC microprocessors that works for me.
I used it to put the bootloader on a usbpicprog PIC programmer I am building. It also programmed my PIC18F46K20. It worked with picpgm and picprog on Linux. Picprog still gave me config bit errors.
I have tried other JDM programmers–simpler ones using no transistors like Simple JDM programmer (though with not-quite-right zeners). It worked intermittently for a while, then stopped working altogether on my PIC18F46K20.
Here’s a JDM programmer that usbpicprog recommends. I haven’t tried it.