The big problem with folding from 3 to 2 layers for PAE is the CR3 register.
With normal paging, it's a pointer to the page directory table. With PAE, it's a pointer to the page directory pointer table. VM assumes the former, so even if we lie to VM about CR3's real value with the micro-kernel, it's not enough to make that work. So that leaves us with two options: either properly fix VM's 2 layer assumption by rewriting large portions of it, or move page handling inside the micro-kernel and gut VM (we still need it for caching, page fault handling and as a middle-man).
The second option is the sanest one, since we'll align ourselves with the common model used by every other micro-kernel. By hiding page table details from user-space, VM won't need to know if the hardware has a 2 or 3 layer layout. Also, it's the only option that does not require a single humongous commit to keep both Gerrit and Jenkins happy. On the downside, that will introduce dynamic memory allocation to the micro-kernel, but I'm perfectly fine about that.
Once that work is done, moving from PSE to PAE should be fairly easy, since only the micro-kernel should be impacted.
About splitting the work: obviously, this is a lot of work for just one person. However, right now I don't see how to split it up so that several people can work on it at the same time without tight synchronization. I need to come up with an proper action plan first and see if some tasks can be done in parallel ; I'll post it here once I have it.