Eglot, not lsp-mode, will be the LSP implementation that makes it into the GNU Emacs distribution (because it is being developed with FSF assignments, and because the maintainer is active in the GNU Emacs development community, maintaining eldoc and flymake, and maybe others).
This is Eglot's code. Try and figure out what's happening in each of these passages:
https://github.com/joaotavora/eglot/blob/master/eglot.el#L41...
https://github.com/joaotavora/eglot/blob/master/eglot.el#L41...
https://github.com/joaotavora/eglot/blob/master/eglot.el#L17...
Contrast with lsp-mode:
https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.e...
https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.e...
https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-modeli...
The lsp-mode code is a lot easier to follow, in my opinion. It's a lot clearer what's happening (although I can't say much about whether either are overabstracted which is admittedly a big concern. I haven't looked into that).
I remember watching an argument between the original authors on Reddit a while back. The lsp-mode author came across as... let's just say more professional. lsp-mode seems much closer to a professional product to me in general.
In any case, I would prefer that neither become part of GNU Emacs since then the development process and code review will become completely opaque (I'm not sure code review is really a thing once it's in Emacs. Just maintainers with push rights to some repo on savannah or something)
Eglot: 70 open, 277 closed
lsp-mode: 94 open, 977 closed
(lsp-mode is much more than 3x the size of eglot and has 15x the number of downloads on MELPA)