Just to cause a bit of (constructive) trouble, have to note I find the hardware and software factoring of the current generation of 3D printers to be mostly wrong.
For common function - Ethernet, wireless, Bluetooth, USB, or SD cards - use the most throughly debugged and flexible software. Put simply, put all this on a well-supported board that runs Linux.
For the 3D printer specific aspect - stepper drivers, switches, and sensors - put this on an attached board. How the printer-board is connected to the Linux board could vary (though I suspect SPI will play a large role, in future).
To be somewhat rude … in my experience hardware folk tend to massively undercount the expense of software. The common fallacy is they can put together a board, and the software will somehow magically appear. The symptom of such work is software that lags and works less well than wanted. (And I suspect Duet and Smoothieboard are in this bucket.)
As far as possible, you want hardware that uses existing software.
The user interface presented by most of the current crop of 3D printers is not good. Simply, the displays are too small, and the supporting software is crap for presenting a good quality user interface.
A really good user interface requires a larger display and a rather large pile of supporting software. The best-of-breed user interfaces are now on smartphones and tablets. The means you want to run Android on your Linux board. (Unless Apple gets into 3D printers.) This is possible, but means you have in large part replicated the function in your smartphone(s) and tablet(s).
If you want to monitor and control your printer remotely, and if you want to monitor and control a farm of printers, then user interface hardware attached to each individual printer is a waste. We need one user interface device per human, not one per printer. As human folk tend to have a smartphone and/or a tablet, better to present the user interface on that device.
That means the user interface for the printer becomes an app that runs on your device. That means the printer needs very little in terms of a display or input for user interface (which reduces cost and software complexity).
In software terms, this means printers offer lean web services. Some of the interfaces need to become standardized, to allow control not limited to the software from the maker of the printer.
Also the notion of embedding slicer software in the printer does not to me seem to make any sort of sense. In the present, slicer software is not smart enough to automatically determine how an object is best printed, and it will be years (at least) before automatic slicing is viable in the printer.
If slicing software in the printer is mostly crap, for the user, better to have the slicing software in one place. That might mean having a slicer in the cloud (if someone comes up with an economic model that makes long-term sense). That certainly means a slicer running on a local computer (as not everyone has a good Internet connection).
In present, slicers not very smart.
By analogy, current 3D printers are a bit like ink-on-paper-printers in the 1980s. Generating printer-specific codes requires knowledge of the printer. In older times, printing required the user know a lot more about their printers … and often required several tries to get the wanted result. For printing to become less error-prone and more automatic, the print software needed to introspect the printer, to discover what might work.
The next step forward requires 3D printers that can be introspected by slicers. That means printers offering a web service, common across printers.
So … hardware factoring into generic and printer-specific. Software factoring to support common introspection and user interface. This is where we end up … sooner or later.