Dear SDR community most likely to travel in time to save the present,

The future is not set, there is no fate but what we make for ourselves. In this
very spirit, GNU Radio 3.9 packs a whole bunch of power when it comes to
transforming the way GNU Radio and its ecosytem can be developed in the future.

You'll find the release tags and signed tarballs now on github, and later on
https://www.gnuradio.org/releases/gnuradio/ .

Not only did we have great progressions from old dependencies that proved to be
all too problematic (SWIG, Python2), but also did we see an incredibly influx of
people actively working on how maintainable this code base is. This will nurture
the project for years to come.

All in all, the main breaking change for pure GRC users will consist in a few
changed blocks – an incredible feat, considering the amount of shift under the
hood. Mentioning large shifts, the work that went into the PyBind binding, the
CMake modernization, the C++ cleanup, the bug-fixing and the CI infrastructure
is worthy of explicit call out; I especially thank

* Josh Morman
* Thomas Habets
* Jacob Gilbert
* Andrej Rode
* Ryan Volz

here.

For developers of OOTs, I'm sure PyBind11 will pose a surprise. If you're used
to SWIG, yes, that's more code to write yourself. But in effect, it's less code
that breaks, and when it breaks, it breaks in much more understandable ways.
Josh has put a lot of effort into automating as much of that as possible.
There's certainly no shortage of demand for that! The ecosystem (remember GNU
Radio's tagline?) is in a steady upwind. We've seen more, and more stable,
contributions from OOT maintainers. That's great!

For in-tree development, newer dependencies and removal of anachronisms will
make sure things move much smoother. Our CI is getting – lately literally every
day – better, which means we not only catch bugs earlier, but also allow for
much quicker review cycles.

One central change:

If you're contributing code upstream, we no longer need you to submit a CLA;
instead, we ask you to just certify, yourself, that you're allowed to contribute
that code (and not, e.g. misappropriating someone else's code).

That's what the DCO (Developer Certificate of Origin) is: Just a quick, "hey,
this code is actually for me to contribute under the project's license"; nothing
more.

Which means that our infrastructure will refuse to let your code into the tree
if you didn't add a

`Signed-off-by: Maxime Example <max...@example.com>`

to your commit message. Luckily, git can do that for you: `git commit -s`.

## [3.9.0.0] - 2021-01-17
### Changed

#### Project Scope

- **We now require commits to be signed off (DCO)**; this means you have to
attach `-s` to your `git commit` command line
- License headers now SPDX format
- C++14
 - use C++11 facilities in a lot of places where Boost was still used,
   especially smart pointers, range loops
 - lambdas where `boost::bind` was used
- C11
- Dependency versions:
  - Python 3.6.5
  - numpy 1.13.3
  - VOLK 2.4.1
  - CMake 3.10.2
  - Boost 1.65
  - Mako 1.0.7
  - PyBind11 2.4.3
- Compiler options:
  - GCC 8.3.0
  - Clang 11.0.0 / Apple Clang 1100
  - MSVC 1910 (Microsoft VS 2017 15.0)
- VOLK now "regular" dependency, not in-tree submodule
- numpy now also a CMake-checked hard dependency for Python support
- Exception Handling: throw by value, catch by reference (clang-tidy check)
- C++11: Emplace in vectors where you can; brings performance boni, but not
  included in clang-tidy-checks
- Further clang-tidy based code optimizations:
- empty() instead of size() == 0
- override where overriding virtual functions (which we do a lot)
- Logging: removed all `std::cerr` and `fprintf(stderr,…)` by GNU Radio logging
- Logging: Changed logging format for many multiline error logs
- purged `snprintf`, `printf` logging
- There were a lot of places where a malloc'ed object was used internally, where
  that was inappropriate. Using simple instance-holding fields now.
- `const` for members that were only set at construction time is now desired,
  and implemented in most places
- `const` -> `constexp` in a lot of places.
- `assert` -> `static_assert`
- An exception-throwing block will now terminate the flow graph process,
  configurable through `top_block`
- `gr-utils` cleanup, folder restructuring
- config version checks installed CMake file will accept "at least this version"
  now
- PyBind11 replaces SWIG
  - Full tree conversion from SWIG to Pybind11 bindings
- Doxygen now uses MathJax, full LaTeX installation no longer required

**NOTE**: Most of the changes above change the generally preferred coding style
in a lot of situations.

#### GRC

- start flowgraph in folder where it resides

#### gnuradio-runtime

- When calculating offsets in non-integer rate FEC, `lround`
- default seed for `gr::random` now actually as documented time-dependent
- loggers moved from `gr::block` to `gr::basic_block`
- PMT serialization
- PMT dicts no longer indistinguishable from pairs
- PMT symbol hashing no longer suffers under oddball own implementations

#### gr-audio

- Increased ALSA buffer nperiods

#### gr-blocks

- `add`, `add_const` VOLK'ized, templated
  - this seems to break things in other places, even if it proves to be
    mathematically identical
- `wavfile` infrastructure: `libsndfile` now dependency

#### gr-digital

- `transcendental` block: default to 32 bit float complex, not double
- Linear equalizer: separate adaptive algorithm, allows for using e.g. trained
  sequences instead of the classical LMS, CMA
- DFE: better structure for decision history

#### gr-dtv

- LDPC encoder: template functions instead of `#define`d macros
- LDPC encoder: smaller tables through `uint16_t` for index tables

#### gr-fec

- API `uint8_t`, not `char`

#### gr-fft

- FFT blocks/functions templatized

#### gr-filter

- logging format
- `rational_resampler_base` -> `rational_resampler`

#### gr-uhd

- Required UHD version bumped to 3.9.7
- logging format

### Deprecated

#### gr-analog

- `sig_source`: `freq` port will be removed in the future

#### gr-audio

- `audio-sink`, `-source`: Windows audio sink/source deprecated, the portaudio
sink/source works even better under windows anyway

#### gr-digital

- In favor of `symbol_sync`, deprecate:
  - `clock_recovery_mm`
  - `msk_timing_recovery`
  - `pfb_clock_sync`

### Added

#### Project Scope

- C++ Generation all over the place
- PyBind bindings + generator
- Github actions
- Reproducible builds-compatible CMake TIMESTAMP

#### gnuradio-runtime

- `block_gateway`: `set_max_output_buffer`
- `GR_PREFS_PATH` environment variable sensitivity to configure the path to the
  config file
- `gnuradio-config-info --print-all`

#### GRC

- option to toggle ID visibilities globally
- Validation check for QT GUI hints
- Python snippets

#### block header parsing tool

- block header parsing tool (GSoC 2019)

#### gr_modtool

- option to convert blacklisted files

#### gr-analog

- `sig_source`: `cmd` port adds support for dicts, setting of frequency,
amplitude, offset and phase parameters

#### gr-blocks

- `selector` now has control message ports
- Rotator-based freq shift convenience wrapper
- Message-to-Variable and vice versa blocks
- DC Spike removal
- IQ Swap
- Complex to interleaved char / short: scaling option
- Delay block: control message port
- Phase Shift block with message port
- `wavfile_sink`, `_source` can now deal with a lot of audio formats:
  uncompressed WAV/AIFF, µ- and A-law compressed audio, OGG/Vorbis, FLAC, even
  octave files
- Stream Demux, which demuxes streams according to lengths vector
- `rotator`: `phase()` getter

#### gr-digital

- OFDM: multiple CP lengths
- `ofdm_equalizer_simpledfe`: `enable_soft_output`
- Constellation Encoder
- Constellation: normalization options

#### gr-fec

- `{en,de}code_rs_8`, `{en,de}code_rs_ccsds`: Reed-Solomon en- and decoders

#### gr-fft

- Windows:
  - Gaussian
  - Flat Top
  - Tukey
- Window build() call now with default beta

#### gr-filter

- GRC: File taps loader block
- Low pass FFT filter convenience wrapper
- ichar / ishort decimator
- phase continuity for `freq_xlating_fir_filter`

#### gr-network

- `gr-network`: a whole new networking blocks module!
  - TCP
  - UDP
- Much better lockup/multithreading support than 3.7-era `blks2` nightmare
  infrastructure :)


#### gr-qtgui

- Azimuth/Elevation plot
- Autocorrelation plot
- Compass visualization
- Dial control
- Gauge: dial, level
- Distance plot
- LED-like indicator
- Message-passing check box
- Message-passing numeric control
- Message-passing push button
- Toggle Button
- Eye sink
- Vertical slider

#### gr-uhd

- Filter API
- UHD 4.0 support
- Power Reference API
- Bidirectional setting messages on both sink, source

#### gr-vocoder

- Codec2 dev branch support
- FreeDV: In/output rates can differ
- FreeDV: text message output

#### gr-zeromq

- C++ GRC templates
- Tag filtering for tag-forwarding blocks

### Removed

#### Project Scope

- VOLK is no longer a submodule
- Sphinx: consolidate into doxygen, or wiki-maintained block list.
- Python 2
- SWIG
- `gru` python module

#### gnuradio-runtime

- `circular_file.cc`
- `math/common_factor.hpp`

#### gr-blocks

- `bin_statistics_f`
- `log2_const`

#### gr-digital

- PFB clock sync: `set_taps`
- deprecated old OFDM infrastructur
  - `ofdm_frame_acquisition`
  - `ofdm_frame_sink`
  - `ofdm_insert_preamble`
  - `ofdm_sync_fixed`
  - `ofdm_sync_pn`
  - `ofdm_sync_pnac`
  - `ofdm_sync_ml`
  - `ofdm_receiver`
- `digital_voice`

#### gr-fft

- `malloc_float`, `_double`: rely on VOLK
- Goertzel: dtor superfluous

#### gr-filter

- deprecated window function duplicates (use them from gr-fft!)

### Fixed

#### Project Scope

- CMake: Qwt, Log4Cpp detection
- ctrlport strings unicodified
- Freedesktop install script was not executed
- Redundant icons installed
- Path substitution on Windows was backslash-broken
- YAML definitions: more than I can count
- Cross-building: py interpreter at runtime != build time

#### gnuradio-runtime

- ctrlport: unholy stored reference to stack-allocated object removed
- Sine table generation for fixed point math
- `gr_unittest`: `floatAlmostEqual` had a lot of false passes due abuse of
  `all()`
- `get_tags_in_range` for `delay < (end-start)`
- Premature tag pruning
- release flattened flowgraph after stopping, fixes restartability/shutdown
  problem
- PMT serialization portability
- latency issue caused by setting block alias on msg block
- Windows logging errors
- ctrlport: Thrift >= 0.13 broke

#### GRC

- Tab widget ID visibilities
- A lot of YAML templates
- Default setting in qtgui chooser restored
- Boolean parameters no longer switch buttons
- Nested namespace handling
- Don't rely on set ordering in tests
- configparser import
- input box color theme on dark themes
- Search box typing doesn't inadvertedly interact with the rest of GRC anymore

#### gr_modtool

- Empty argument lists allowed
- Boost UTF replaced CppUnit, this needed to be done here, too

#### gr-analog

- `wfm` left/right, filters

#### gr-audio

- portaudio: lock acquisition was improper

#### gr-blocks

- Throttle now uses monotonic clock
- Tag debug only saved last `work` call's tags
- File sink flushes on `stop`
- `gr_read_file_metadata.py` used to lose `rx_time` precision
- File source big file handling under Windows
- `file_*`: `fseek` errors used to be ignored

#### gr-digital

- `map_bb`: thread safety, buffer overflows
- `additive_scrambler`: reset was broken
- Constellation scalefactor wasn't always initialized
- long-standing `qa_header_payload_demux` bug addressed by waiting for both RX
  and TX, not only either
- false triggers in `correlate_access_code`

#### gr-dtv

- rate mismatch in ATSC flowgraphs

#### gr-fec

- `async_decoder` Heap corruption
- `cc_encoder`: constraint length K > 8 led to wrong output

#### gr-fft

- thread safety of copy assignment/ctor
- log power FFT Python

#### gr-filter

- `variable_band_pass_filter` GRC complex taps input
- RRC filter gain for alpha = 1

#### gr-qtgui

- Remove copies of image data in returns by using move semantics
- Remove bogus overriding in drawing functions of `plot_raster`, `_waterfall`
- Edit MSG box: don't require key to be set
- Don't check for Python2 libs
- Number Sink ignored averaging setting

#### gr-uhd

- UHD apps: Py3 fixes
- USRP blocks: multichannel objects not properly populating channels

#### gr-video-sdl

- YUV formats fixed

#### gr-zeromq

- Don't depend on deprecated ZMQ functionality (fix warnings, include what you
  use)
- Unhandled exceptions now handled, much calmer
- Avoid infinite blocking in `tb.stop()` by using `ZMQ_LINGER`

## Contributors

* Adrien Michel
* Alba Mendez <m...@alba.sh>
* Alekh Gupta <alekhgupta1...@gmail.com>
* A. Maitland Bottoms <bott...@debian.org>
* Anders Kalør <and...@kaloer.com>
* Andrej Rode <m...@andrejro.de>
* Andriy Gelman <andriy.gel...@gmail.com>
* Antetokounpo <antor....@outlook.com>
* Arpit Gupta <guptarpit1...@gmail.com>
* Artem Pisarenko <artem.k.pisare...@gmail.com>
* arualok22 <arualo...@gmail.com>
* Bastian Bloessl <m...@bastibl.net>
* Behnam Sabaghi <behnamsaba...@gmail.com>
* Brennan Ashton <bash...@brennanashton.com>
* Brett Gottula <br...@astranis.com>
* Chris Donohue <christopher.dono...@gmail.com>
* Chris Mayo <aklh...@gmail.com>
* Christophe Seguinot <christophe.segui...@univ-lille.fr>
* Clayton Smith <arg...@gmail.com>
* CMorin <barth...@laposte.net>
* Daniel Estévez <dan...@destevez.net>
* Davide Gerhard <rain...@irh.it>
* David Pi <david.pi...@gmail.com>
* Derek Kozel <de...@bitstovolts.com>
* devnulling
* Doron Behar <doron.be...@gmail.com>
* duggabe <ba...@dcsmail.net>
* Eduardo Sánchez Muñoz <e...@eduardosm.net>
* efardin <efar...@ieee.org>
* elms <e...@freshred.net>
* Emmanuel Blot <emmanuel.b...@free.fr>
* ewxl <e...@wecksell.se>
* Fabian P. Schmidt <ke...@mailbox.org>
* gateship1 <mg3...@drexel.edu>
* ghostop14 <ghosto...@gmail.com>
* Glenn Richardson <glenn.richard...@live.com>
* Grant Cox <grant....@deepspaceamps.com>
* Gwenhael Goavec-Merou <gwenhael.goavec-me...@trabucayre.com>
* Håkon Vågsether <haako...@gmail.com>
* Huang Rui <vows...@gmail.com>
* Hugh Pyle <hp...@cabezal.com>
* Igor Freire <i...@blockstream.com>
* Ilya Tagunov <tagu...@gmail.com>
* Jacob Gilbert <mrjacobagilb...@gmail.com>
* Jan Kraemer <kraemer...@gmail.com>
* japm48
* Jay Kamat <jaygka...@gmail.com>
* Jeff Long <willco...@gmail.com>
* Johannes Demel <de...@ant.uni-bremen.de>
* Johannes K Becker <jkbec...@bu.edu>
* Josh Morman <jmor...@perspectalabs.com>
* karel
* kc1212
* luzpaz
* Marc L <mar...@vt.edu>
* Marcus Müller <mmuel...@gnuradio.org> <muel...@kit.edu>
* Martin Braun <martin.br...@ettus.com> <mar...@gnuradio.org>
* Mathias Rasmussen <mathia...@gmail.com>
* Matt Mills <mmi...@2bn.net>
* Maximilian Stiefel <stiefel.maximil...@online.de>
* Michael Byers <byersjr.mich...@gmail.com>
* Michael Dickens <michael.dick...@ettus.com>
* Michael Roe <m...@cornstalk.org.uk>
* Mike Walters <m...@flomp.net>
* Nathan West <nw...@deepsig.io>
* Nicholas Corgan <n.cor...@gmail.com>
* Nick Østergaard <oe.n...@gmail.com>
* Nicolas Cuervo <cuervonico...@gmail.com>
* Notou <barth...@laposte.net>
* Oleksandr Kravchuk <open.sou...@oleksandr-kravchuk.com>
* Oliver
* Paul Boven <p.bo...@xs4all.nl>
* Paul Wicks <pwick...@gmail.com>
* Philip Balister <phi...@balister.org>
* rear1019 <rear1...@posteo.de>
* RedStone002
* Ron Economos <w...@comcast.net>
* Ryan Govostes
* Ryan Schutt
* Ryan Volz <rv...@mit.edu>
* Scott Torborg <storb...@gmail.com>
* Sebastian Koslowski <sebastian.koslow...@gmail.com>
* Sebastian Müller <gse...@gmail.com>
* Sebastian Olsen <sebastian.ol...@aero.org>
* Seeker <meaningseek...@protonmail.com>
* sidkapoor97 <16ec142siddha...@nitk.edu.in>
* Stefan `Sec` Zehl <s...@42.org>
* Swapnil Negi <swapnil.neg...@gmail.com>
* Sylvain Munaut <t...@246tnt.com>
* Terry May <terryd...@gmail.com>
* Thomas Habets <tho...@habets.se> <hab...@google.com>
* Valerii Zapodovnikov <val.zapod...@gmail.com>
* Vasil Velichkov <vvvelich...@gmail.com>
* Volker Schroer
* wcampbell <wcampbell1...@gmail.com>
* William Barnhart <williambbarnh...@gmail.com>
* Yamakaja <da...@gmx.net>
* Zackery Spytz <zsp...@gmail.com>
-----BEGIN PGP SIGNATURE-----

iQGzBAABCgAdFiEEazBHPJy0WqWByiEh5sHsspWnRUsFAmAEj7UACgkQ5sHsspWn
RUuXUQwAsWQfueQAtan3x11aVzEJRJdGfecJVdlSc5EmfZ/daD+yp7h2CyED9/hI
bPG5svh6kMIzqRr7lfj8ZDxpqpwDzdGojx7Rmh9d2kd1GH945vXxHSUPRiUmlEMf
oz9FV2MmjEFksKy26eaig+HKB8KfYoOtZ6tKF05N35DThmSP8xg04e3YzBMeCixy
9z2yBPWWWywbpVQwrMJvz69oy51U2eOg/Zu6qEh3bao07ERyDVFlqX98TVYXy/Iz
UVre797p7apNJi5C9IDzj3sO3l+W6ZU2k9UHlMBooxOd0imX/Z6YAldWGZzDhYQI
DENzSjAqWIqTCC35YGAof8I+jOf0iFv0HgME87SPQSIoyDnLPvMB6fEO1oV9Zeec
AG88BRUAR/m+UUjWXx/LCqyqQJZbvxxqA817ORYCVpYbvneCtAQF4TR5bwg/9+f/
fZq4YFYx/1g3YOuqROm64RZKWlquSWhW6BR95rsMx6tnEvKayOFaWFpdVYa1VzWM
6D2trinD
=NMAe
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNATURE-----

iQGzBAABCgAdFiEEazBHPJy0WqWByiEh5sHsspWnRUsFAmAEj7AACgkQ5sHsspWn
RUsDwQv7B4OQ3ba+0TXoxDyEGcOz6GTnzLZkSXkBPEYSOVrhws+0Uu+72YHuAldz
4GaLo1eIp9L6Pz+ONebYSdNgVSerNktaquJGz6y9a2QfWOzIe1jaQU0z8hl3QemB
YwZndiO653BBIBPR27DlscPC10wWPuQs4wZPd5WWpDbOenowYrxo1WbbRGnL8E1+
q/7333tbnMfHhpVL5rVO1u5NA32tMB2ObuB3ojxazGXKUZ9eBL6Q8W3zVGpfPv6m
Dsar8m+qEiAIF4xg/QdGghI3qI/URuH18dRYCeZ8yUpH8kwVDwOrpil8/fngfDSl
xZ6jwc0BkxEAPiu3q2/r0smEbPSPvSVgabaMh/BRAhV3aw3m9B04khba9dxicowi
TeIq2OXFGKPiIpuh9T4I9o0AI0dNDX/x13l+NYsikvR5/btKSNFiL7FziOYIDgP3
DiU2NeVDUIPmsl3n8u86V0TNs/+ir9bSq4IH6I+ybeFw6sfmzdtAQ7MRl1DNQuG3
/kpQ2Me/
=j0aM
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNATURE-----

iQGzBAABCgAdFiEEazBHPJy0WqWByiEh5sHsspWnRUsFAmAEj6sACgkQ5sHsspWn
RUsRmAv+MYRXSJ7iuEyJG7o5gQrtH+xqBLgViA9qKxYgOoITpOIud+95t+AKbPWc
flBunV2DHd65EEulyrUdrMyEaPHZEtJjPSmIiYNGgOjlzhwZgbWbeLSQf/uliVwX
/zWhsdizCiPZr3scT741XuIQO5YLIlbR0RJHcaQ94Se0Unf70qxj/GWZdzmQutBr
G6grd3JdJbLSaLeudIkHa+iYgGZjs4BOwcEmvAY1iUxpSUAbCJWMy8k66+Hq7lLn
RYDEFgWfdmGNnXDz8QHpNyO4owf2LYOp0hlw14Zyem3Rkernab0WAVZlAkpVkqZr
uFMBXFzTd3urfij2FzILgkCc7f6J57+uw61NChympLA68e3YQenqxZXKczU1MdDm
eEdGs+QwSTqaJ7dzGlOALIL/cWHJSB3eTs0DQe/44Z6xRAKxKR61rXvzd/qiEz0q
kmccuXmioOe8s6HGaIGoWSjuN8XxWgxfd1MuyXfzK2ZXCpMm4TPU2S2bdrLMsnui
0Jsd6WCm
=Uktx
-----END PGP SIGNATURE-----
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
EKKP
=o+XA
-----END PGP PUBLIC KEY BLOCK-----

Reply via email to