Unlike how the fd struct have been implemented, I chose not to derive these syncs from the object base, because it seemed inconvenient to have to declare all the unused ops. Still they are refcounted, to allow us to share a sync between multiple objects, which will later benefit the console objects use cases, maybe others.
This makes me thing that the fd struct could also benefit from being lightweight entities as well, as it doesn't seem they really use most of the object vtable ops, and arguably we could have a common "light" refcounted/dumpable base for all fds, syncs and objects, but I didn't want to jump into that rabbit hole and it could be implemented later.
This was of course the original intent of the object struct. There has been a bit of feature creep, but I don't think it's bad enough to justify adding a parallel infrastructure for these.
I'm not convinced we need a refcounted struct sync at all, but if we do, it should be a proper object.