It looks like this is very nearly ready in upstream Chromium, apparently just blocked on [this CL](https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2037803), which has to do with an upload issue on Fedora.

Upstream tracking issue: https://bugs.chromium.org/p/crashpad/issues/detail?id=30

Once this CL is landed we should consider enabling Crashpad on Linux and removing our Breakpad-related code.
shell/app/electron_main.cc
#if BUILDFLAG(ENABLE_RUN_AS_NODE)
  if (electron::fuses::IsRunAsNodeEnabled() && run_as_node) {
    base::AtExitManager atexit_manager;
    base::i18n::InitializeICU();
    auto ret = electron::NodeMain(argv.size(), argv.data());
    std::for_each(argv.begin(), argv.end(), free);
    return ret;
  }
#endif
  base::CommandLine::Init(argv.size(), argv.data());
  const base::CommandLine* command_line =
      base::CommandLine::ForCurrentProcess();
  const std::string process_type =
      command_line->GetSwitchValueASCII(kProcessType);
  if (process_type == crash_reporter::switches::kCrashpadHandler) {
    
    std::unique_ptr<browser_watcher::ExitCodeWatcher> exit_code_watcher;
    
    crashpad::InitialClientData initial_client_data;
    if (initial_client_data.InitializeFromString(
            command_line->GetSwitchValueASCII("initial-client-data"))) {
      
      HANDLE duplicate_handle = INVALID_HANDLE_VALUE;
      if (DuplicateHandle(
              ::GetCurrentProcess(), initial_client_data.client_process(),
              ::GetCurrentProcess(), &duplicate_handle,
              PROCESS_QUERY_INFORMATION, FALSE, DUPLICATE_SAME_ACCESS)) {
        base::Process parent_process(duplicate_handle);
        exit_code_watcher =
            std::make_unique<browser_watcher::ExitCodeWatcher>();