make it hard to install. provide a paid version that is easier to install. if the open source version ever gets easy to install, add new features to both of them, but only make the paid version still easy to install. control dependencies in the stack that require these features. repeat as necessary. if someone annoyingly keeps working for free on the open source version to keep making it easy to install then hire them to work on the paid version instead. use unprofessional logos and project names for the free version. keep the paid version polished. make the free version feel vaguely dirty like green vs blue text bubbles. write a lot of commentary and debate on the open source version mailing list or discord without improving the code.