source: trunk/NEWS.rst

Last change on this file was 34f11248, checked in by meejah <meejah@…>, at 2024-12-14T09:13:08Z

missing summary

  • Property mode set to 100644
File size: 197.0 KB
Line 
1.. -*- coding: utf-8-with-signature -*-
2
3==================================
4User-Visible Changes in Tahoe-LAFS
5==================================
6
7.. towncrier start line
8
9
10Release 1.20.0 (2024-12-03)
11'''''''''''''''''''''''''''
12
13Backwards Incompatible Changes
14------------------------------
15
16- Properly interpret "tahoe create --storage-dir" as an option.
17
18  Versions 1.19.0 and older interpreted "--storage-dir" as a "flag" and thus wouldn't work properly. (`#4110 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4110>`_)
19
20
21Features
22--------
23
24- Continued work to make Tahoe-LAFS take advantage of multiple CPUs. (`#4072 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4072>`_)
25- Mutable directories can now be created with a pre-determined "signature key" via the web API using the "private-key=..." parameter. The "private-key" value must be a DER-encoded 2048-bit RSA private key in urlsafe base64 encoding. (`#4094 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4094>`_)
26
27
28Bug Fixes
29---------
30
31- Upgrade CBOR, fixing encoding on 65KiB++ strings (`#4087 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4087>`_)
32- Stop using the C version of the cbor2 decoder. (`#4088 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4088>`_)
33- Fix incompatibility with cryptography 43. (`#4100 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4100>`_)
34- Fix incompatibility with attrs 24.1. (`#4101 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4101>`_)
35
36
37Dependency/Installation Changes
38-------------------------------
39
40- Now using the "hatch" build system, and pyproject.toml (exclusively) (`#4133 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4133>`_)
41
42
43Documentation Changes
44---------------------
45
46- Tahoe-LAFS manual's table of contents page has been reorganized. (`#3636 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3636>`_)
47- Add a global Sphinx generated glossary. Link the static GBS glossary to the global glossary. (`#4116 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4116>`_)
48
49
50Misc/Other
51----------
52
53- `#3636 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3636>`_, `#4076 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4076>`_, `#4082 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4082>`_, `#4085 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4085>`_, `#4090 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4090>`_, `#4091 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4091>`_, `#4092 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4092>`_, `#4093 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4093>`_, `#4114 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4114>`_, `#4115 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4115>`_, `#4126 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4126>`_, `#4130 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4130>`_, `#4132 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4132>`_, `#4134 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4134>`_, `#4141 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4141>`_
54
55
56Release 1.19.0 (2024-01-04)
57'''''''''''''''''''''''''''
58
59Features
60--------
61
62- Tahoe-LAFS now includes a new "Grid Manager" specification and implementation adding more options to control which storage servers a client will use for uploads. (`#2916 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2916>`_)
63- Added support for Python 3.12, and work with Eliot 1.15 (`#3072 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3072>`_)
64- `tahoe run ...` will now exit when its stdin is closed.
65
66  This facilitates subprocess management, specifically cleanup.
67  When a parent process is running tahoe and exits without time to do "proper" cleanup at least the stdin descriptor will be closed.
68  Subsequently "tahoe run" notices this and exits. (`#3921 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3921>`_)
69- Mutable objects can now be created with a pre-determined "signature key" using the ``tahoe put`` CLI or the HTTP API.  This enables deterministic creation of mutable capabilities.  This feature must be used with care to preserve the normal security and reliability properties. (`#3962 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3962>`_)
70- Added support for Python 3.11. (`#3982 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3982>`_)
71- tahoe run now accepts --allow-stdin-close to mean "keep running if stdin closes" (`#4036 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4036>`_)
72- The storage server and client now support a new, HTTPS-based protocol. (`#4041 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4041>`_)
73- Started work on a new end-to-end benchmarking framework. (`#4060 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4060>`_)
74- Some operations now run in threads, improving the responsiveness of Tahoe nodes. (`#4068 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4068>`_)
75- Logs are now written in a thread, which should make the application more responsive under load. (`#4804 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4804>`_)
76
77
78Bug Fixes
79---------
80
81- Provide better feedback from plugin configuration errors
82
83  Local errors now print a useful message and exit.
84  Announcements that only contain invalid / unusable plugins now show a message in the Welcome page. (`#3899 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3899>`_)
85- Work with (and require) newer versions of pycddl. (`#3938 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3938>`_)
86- Uploading immutables will now better use available bandwidth, which should allow for faster uploads in many cases. (`#3939 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3939>`_)
87- Downloads of large immutables should now finish much faster. (`#3946 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3946>`_)
88- Fix incompatibility with transitive dependency charset_normalizer >= 3  when using PyInstaller. (`#3966 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3966>`_)
89- A bug where Introducer nodes configured to listen on Tor or I2P would not actually do so has been fixed. (`#3999 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3999>`_)
90- The (still off-by-default) HTTP storage client will now use Tor when Tor-based client-side anonymity was requested.
91  Previously it would use normal TCP connections and not be anonymous. (`#4029 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4029>`_)
92- Provide our own copy of attrs' "provides()" validator
93
94  This validator is deprecated and slated for removal; that project's suggestion is to copy the code to our project. (`#4056 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4056>`_)
95- Fix a race condition with SegmentFetcher (`#4078 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4078>`_)
96
97
98Dependency/Installation Changes
99-------------------------------
100
101- tenacity is no longer a dependency. (`#3989 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3989>`_)
102
103
104Documentation Changes
105---------------------
106
107- Several minor errors in the Great Black Swamp proposed specification document have been fixed. (`#3922 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3922>`_)
108- Document the ``force_foolscap`` configuration options for ``[storage]`` and ``[client]``. (`#4039 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4039>`_)
109
110
111Removed Features
112----------------
113
114- Python 3.7 is no longer supported, and Debian 10 and Ubuntu 18.04 are no longer tested. (`#3964 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3964>`_)
115
116
117Other Changes
118-------------
119
120- The integration test suite now includes a set of capability test vectors (``integration/vectors/test_vectors.yaml``) which can be used to verify compatibility between Tahoe-LAFS and other implementations. (`#3961 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3961>`_)
121
122
123Misc/Other
124----------
125
126- `#3508 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3508>`_, `#3622 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3622>`_, `#3783 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3783>`_, `#3870 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3870>`_, `#3874 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3874>`_, `#3880 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3880>`_, `#3904 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3904>`_, `#3910 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3910>`_, `#3914 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3914>`_, `#3917 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3917>`_, `#3927 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3927>`_, `#3928 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3928>`_, `#3935 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3935>`_, `#3936 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3936>`_, `#3937 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3937>`_, `#3940 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3940>`_, `#3942 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3942>`_, `#3944 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3944>`_, `#3947 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3947>`_, `#3950 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3950>`_, `#3952 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3952>`_, `#3953 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3953>`_, `#3954 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3954>`_, `#3956 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3956>`_, `#3958 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3958>`_, `#3959 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3959>`_, `#3960 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3960>`_, `#3965 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3965>`_, `#3967 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3967>`_, `#3968 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3968>`_, `#3969 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3969>`_, `#3970 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3970>`_, `#3971 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3971>`_, `#3974 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3974>`_, `#3975 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3975>`_, `#3976 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3976>`_, `#3978 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3978>`_, `#3987 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3987>`_, `#3988 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3988>`_, `#3991 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3991>`_, `#3993 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3993>`_, `#3994 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3994>`_, `#3996 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3996>`_, `#3998 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3998>`_, `#4000 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4000>`_, `#4001 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4001>`_, `#4002 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4002>`_, `#4003 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4003>`_, `#4004 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4004>`_, `#4005 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4005>`_, `#4006 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4006>`_, `#4009 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4009>`_, `#4010 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4010>`_, `#4012 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4012>`_, `#4014 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4014>`_, `#4015 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4015>`_, `#4016 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4016>`_, `#4018 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4018>`_, `#4019 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4019>`_, `#4020 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4020>`_, `#4022 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4022>`_, `#4023 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4023>`_, `#4024 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4024>`_, `#4026 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4026>`_, `#4027 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4027>`_, `#4028 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4028>`_, `#4035 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4035>`_, `#4038 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4038>`_, `#4040 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4040>`_, `#4042 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4042>`_, `#4044 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4044>`_, `#4046 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4046>`_, `#4047 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4047>`_, `#4049 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4049>`_, `#4050 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4050>`_, `#4051 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4051>`_, `#4052 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4052>`_, `#4055 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4055>`_, `#4059 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4059>`_, `#4061 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4061>`_, `#4062 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4062>`_, `#4063 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4063>`_, `#4065 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4065>`_, `#4066 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4066>`_, `#4070 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4070>`_, `#4074 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4074>`_, `#4075 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4075>`_
127
128
129Release 1.18.0 (2022-10-02)
130'''''''''''''''''''''''''''
131
132Backwards Incompatible Changes
133------------------------------
134
135- Python 3.6 is no longer supported, as it has reached end-of-life and is no longer receiving security updates. (`#3865 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3865>`_)
136- Python 3.7 or later is now required; Python 2 is no longer supported. (`#3873 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3873>`_)
137- Share corruption reports stored on disk are now always encoded in UTF-8. (`#3879 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3879>`_)
138- Record both the PID and the process creation-time:
139
140  a new kind of pidfile in `running.process` records both
141  the PID and the creation-time of the process. This facilitates
142  automatic discovery of a "stale" pidfile that points to a
143  currently-running process. If the recorded creation-time matches
144  the creation-time of the running process, then it is a still-running
145  `tahoe run` process. Otherwise, the file is stale.
146
147  The `twistd.pid` file is no longer present. (`#3926 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3926>`_)
148
149
150Features
151--------
152
153- The implementation of SDMF and MDMF (mutables) now requires RSA keys to be exactly 2048 bits, aligning them with the specification.
154
155  Some code existed to allow tests to shorten this and it's
156  conceptually possible a modified client produced mutables
157  with different key-sizes. However, the spec says that they
158  must be 2048 bits. If you happen to have a capability with
159  a key-size different from 2048 you may use 1.17.1 or earlier
160  to read the content. (`#3828 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3828>`_)
161- "make" based release automation (`#3846 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3846>`_)
162
163
164Misc/Other
165----------
166
167- `#3327 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3327>`_, `#3526 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3526>`_, `#3697 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3697>`_, `#3709 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3709>`_, `#3786 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3786>`_, `#3788 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3788>`_, `#3802 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3802>`_, `#3816 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3816>`_, `#3855 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3855>`_, `#3858 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3858>`_, `#3859 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3859>`_, `#3860 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3860>`_, `#3867 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3867>`_, `#3868 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3868>`_, `#3871 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3871>`_, `#3872 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3872>`_, `#3875 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3875>`_, `#3876 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3876>`_, `#3877 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3877>`_, `#3881 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3881>`_, `#3882 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3882>`_, `#3883 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3883>`_, `#3889 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3889>`_, `#3890 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3890>`_, `#3891 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3891>`_, `#3893 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3893>`_, `#3895 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3895>`_, `#3896 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3896>`_, `#3898 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3898>`_, `#3900 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3900>`_, `#3909 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3909>`_, `#3913 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3913>`_, `#3915 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3915>`_, `#3916 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3916>`_
168
169
170Release 1.17.1 (2022-01-07)
171'''''''''''''''''''''''''''
172
173Bug Fixes
174---------
175
176- Fixed regression on Python 3 causing the JSON version of the Welcome page to sometimes produce a 500 error (`#3852 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3852>`_)
177- Fixed regression on Python 3 where JSON HTTP POSTs failed to be processed. (`#3854 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3854>`_)
178
179
180Misc/Other
181----------
182
183- `#3848 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3848>`_, `#3849 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3849>`_, `#3850 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3850>`_, `#3856 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3856>`_
184
185
186Release 1.17.0 (2021-12-06)
187'''''''''''''''''''''''''''
188
189Security-related Changes
190------------------------
191
192- The introducer server no longer writes the sensitive introducer fURL value to its log at startup time.  Instead it writes the well-known path of the file from which this value can be read. (`#3819 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3819>`_)
193- The storage protocol operation ``add_lease`` now safely rejects an attempt to add a 4,294,967,296th lease to an immutable share.
194  Previously this failed with an error after recording the new lease in the share file, resulting in the share file losing track of a one previous lease. (`#3821 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3821>`_)
195- The storage protocol operation ``readv`` now safely rejects attempts to read negative lengths.
196  Previously these read requests were satisfied with the complete contents of the share file (including trailing metadata) starting from the specified offset. (`#3822 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3822>`_)
197- The storage server implementation now respects the ``reserved_space`` configuration value when writing lease information and recording corruption advisories.
198  Previously, new leases could be created and written to disk even when the storage server had less remaining space than the configured reserve space value.
199  Now this operation will fail with an exception and the lease will not be created.
200  Similarly, if there is no space available, corruption advisories will be logged but not written to disk. (`#3823 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3823>`_)
201- The storage server implementation no longer records corruption advisories about storage indexes for which it holds no shares. (`#3824 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3824>`_)
202- The lease-checker now uses JSON instead of pickle to serialize its state.
203
204  tahoe will now refuse to run until you either delete all pickle files or
205  migrate them using the new command::
206
207      tahoe admin migrate-crawler
208
209  This will migrate all crawler-related pickle files. (`#3825 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3825>`_)
210- The SFTP server no longer accepts password-based credentials for authentication.
211  Public/private key-based credentials are now the only supported authentication type.
212  This removes plaintext password storage from the SFTP credentials file.
213  It also removes a possible timing side-channel vulnerability which might have allowed attackers to discover an account's plaintext password. (`#3827 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3827>`_)
214- The storage server now keeps hashes of lease renew and cancel secrets for immutable share files instead of keeping the original secrets. (`#3839 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3839>`_)
215- The storage server now keeps hashes of lease renew and cancel secrets for mutable share files instead of keeping the original secrets. (`#3841 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3841>`_)
216
217
218Features
219--------
220
221- Tahoe-LAFS releases now have just a .tar.gz source release and a (universal) wheel (`#3735 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3735>`_)
222- tahoe-lafs now provides its statistics also in OpenMetrics format (for Prometheus et. al.) at `/statistics?t=openmetrics`. (`#3786 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3786>`_)
223- If uploading an immutable hasn't had a write for 30 minutes, the storage server will abort the upload. (`#3807 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3807>`_)
224
225
226Bug Fixes
227---------
228
229- When uploading an immutable, overlapping writes that include conflicting data are rejected. In practice, this likely didn't happen in real-world usage. (`#3801 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3801>`_)
230
231
232Dependency/Installation Changes
233-------------------------------
234
235- Tahoe-LAFS now supports running on NixOS 21.05 with Python 3. (`#3808 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3808>`_)
236
237
238Documentation Changes
239---------------------
240
241- The news file for future releases will include a section for changes with a security impact. (`#3815 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3815>`_)
242
243
244Removed Features
245----------------
246
247- The little-used "control port" has been removed from all node types. (`#3814 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3814>`_)
248
249
250Other Changes
251-------------
252
253- Tahoe-LAFS no longer runs its Tor integration test suite on Python 2 due to the increased complexity of obtaining compatible versions of necessary dependencies. (`#3837 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3837>`_)
254
255
256Misc/Other
257----------
258
259- `#3525 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3525>`_, `#3527 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3527>`_, `#3754 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3754>`_, `#3758 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3758>`_, `#3784 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3784>`_, `#3792 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3792>`_, `#3793 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3793>`_, `#3795 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3795>`_, `#3797 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3797>`_, `#3798 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3798>`_, `#3799 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3799>`_, `#3800 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3800>`_, `#3805 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3805>`_, `#3806 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3806>`_, `#3810 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3810>`_, `#3812 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3812>`_, `#3820 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3820>`_, `#3829 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3829>`_, `#3830 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3830>`_, `#3831 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3831>`_, `#3832 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3832>`_, `#3833 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3833>`_, `#3834 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3834>`_, `#3835 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3835>`_, `#3836 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3836>`_, `#3838 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3838>`_, `#3842 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3842>`_, `#3843 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3843>`_, `#3847 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3847>`_
260
261
262Release 1.16.0 (2021-09-17)
263'''''''''''''''''''''''''''
264
265Backwards Incompatible Changes
266------------------------------
267
268- The Tahoe command line now always uses UTF-8 to decode its arguments, regardless of locale. (`#3588 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3588>`_)
269- tahoe backup's --exclude-from has been renamed to --exclude-from-utf-8, and correspondingly requires the file to be UTF-8 encoded. (`#3716 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3716>`_)
270
271
272Features
273--------
274
275- Added 'typechecks' environment for tox running mypy and performing static typechecks. (`#3399 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3399>`_)
276- The NixOS-packaged Tahoe-LAFS now knows its own version. (`#3629 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3629>`_)
277
278
279Bug Fixes
280---------
281
282- Fix regression that broke flogtool results on Python 2. (`#3509 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3509>`_)
283- Fix a logging regression on Python 2 involving unicode strings. (`#3510 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3510>`_)
284- Certain implementation-internal weakref KeyErrors are now handled and should no longer cause user-initiated operations to fail. (`#3539 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3539>`_)
285- SFTP public key auth likely works more consistently, and SFTP in general was previously broken. (`#3584 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3584>`_)
286- Fixed issue where redirecting old-style URIs (/uri/?uri=...) didn't work. (`#3590 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3590>`_)
287- ``tahoe invite`` will now read share encoding/placement configuration values from a Tahoe client node configuration file if they are not given on the command line, instead of raising an unhandled exception. (`#3650 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3650>`_)
288- Fix regression where uploading files with non-ASCII names failed. (`#3738 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3738>`_)
289- Fixed annoying UnicodeWarning message on Python 2 when running CLI tools. (`#3739 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3739>`_)
290- Fixed bug where share corruption events were not logged on storage servers running on Windows. (`#3779 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3779>`_)
291
292
293Dependency/Installation Changes
294-------------------------------
295
296- Tahoe-LAFS now requires Twisted 19.10.0 or newer.  As a result, it now has a transitive dependency on bcrypt. (`#1549 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1549>`_)
297- Debian 8 support has been replaced with Debian 10 support. (`#3326 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3326>`_)
298- Tahoe-LAFS no longer depends on Nevow. (`#3433 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3433>`_)
299- Tahoe-LAFS now requires the `netifaces` Python package and no longer requires the external `ip`, `ifconfig`, or `route.exe` executables. (`#3486 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3486>`_)
300- The Tahoe-LAFS project no longer commits to maintaining binary packages for all dependencies at <https://tahoe-lafs.org/deps>.  Please use PyPI instead. (`#3497 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3497>`_)
301- Tahoe-LAFS now uses a forked version of txi2p (named txi2p-tahoe) with Python 3 support. (`#3633 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3633>`_)
302- The Nix package now includes correct version information. (`#3712 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3712>`_)
303- Use netifaces 0.11.0 wheel package from PyPI.org if you use 64-bit Python 2.7 on Windows.  VCPython27 downloads are no longer available at Microsoft's website, which has made building Python 2.7 wheel packages of Python libraries with C extensions (such as netifaces) on Windows difficult. (`#3733 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3733>`_)
304
305
306Configuration Changes
307---------------------
308
309- The ``[client]introducer.furl`` configuration item is now deprecated in favor of the ``private/introducers.yaml`` file. (`#3504 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3504>`_)
310
311
312Documentation Changes
313---------------------
314
315- Documentation now has its own towncrier category. (`#3664 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3664>`_)
316- `tox -e docs` will treat warnings about docs as errors. (`#3666 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3666>`_)
317- The visibility of the Tahoe-LAFS logo has been improved for "dark" themed viewing. (`#3677 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3677>`_)
318- A cheatsheet-style document for contributors was created at CONTRIBUTORS.rst (`#3682 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3682>`_)
319- Our IRC channel, #tahoe-lafs, has been moved to irc.libera.chat. (`#3721 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3721>`_)
320- Tahoe-LAFS project is now registered with Libera.Chat IRC network. (`#3726 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3726>`_)
321- Rewriting the installation guide for Tahoe-LAFS. (`#3747 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3747>`_)
322- Documentation and installation links in the README have been fixed. (`#3749 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3749>`_)
323- The Great Black Swamp proposed specification now includes sample interactions to demonstrate expected usage patterns. (`#3764 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3764>`_)
324- The Great Black Swamp proposed specification now includes a glossary. (`#3765 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3765>`_)
325- The Great Black Swamp specification now allows parallel upload of immutable share data. (`#3769 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3769>`_)
326- There is now a specification for the scheme which Tahoe-LAFS storage clients use to derive their lease renewal secrets. (`#3774 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3774>`_)
327- The Great Black Swamp proposed specification now has a simplified interface for reading data from immutable shares. (`#3777 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3777>`_)
328- tahoe-dev mailing list is now at tahoe-dev@lists.tahoe-lafs.org. (`#3782 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3782>`_)
329- The Great Black Swamp specification now describes the required authorization scheme. (`#3785 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3785>`_)
330- The "Great Black Swamp" proposed specification has been expanded to include two lease management APIs. (`#3037 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3037>`_)
331- The specification section of the Tahoe-LAFS documentation now includes explicit discussion of the security properties of Foolscap "fURLs" on which it depends. (`#3503 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3503>`_)
332- The README, revised by Viktoriia with feedback from the team, is now more focused on the developer community and provides more information about Tahoe-LAFS, why it's important, and how someone can use it or start contributing to it. (`#3545 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3545>`_)
333- The "Great Black Swamp" proposed specification has been changed use ``v=1`` as the URL version identifier. (`#3644 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3644>`_)
334- You can run `make livehtml` in docs directory to invoke sphinx-autobuild. (`#3663 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3663>`_)
335
336
337Removed Features
338----------------
339
340- Announcements delivered through the introducer system are no longer automatically annotated with copious information about the Tahoe-LAFS software version nor the versions of its dependencies. (`#3518 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3518>`_)
341- The stats gatherer, broken since at least Tahoe-LAFS 1.13.0, has been removed.  The ``[client]stats_gatherer.furl`` configuration item in ``tahoe.cfg`` is no longer allowed.  The Tahoe-LAFS project recommends using a third-party metrics aggregation tool instead. (`#3549 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3549>`_)
342- The deprecated ``tahoe`` start, restart, stop, and daemonize sub-commands have been removed. (`#3550 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3550>`_)
343- FTP is no longer supported by Tahoe-LAFS. Please use the SFTP support instead. (`#3583 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3583>`_)
344- Removed support for the Account Server frontend authentication type. (`#3652 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3652>`_)
345
346
347Other Changes
348-------------
349
350- Refactored test_introducer in web tests to use custom base test cases (`#3757 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3757>`_)
351
352
353Misc/Other
354----------
355
356- `#2928 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2928>`_, `#3283 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3283>`_, `#3314 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3314>`_, `#3384 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3384>`_, `#3385 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3385>`_, `#3390 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3390>`_, `#3404 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3404>`_, `#3428 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3428>`_, `#3432 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3432>`_, `#3434 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3434>`_, `#3435 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3435>`_, `#3454 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3454>`_, `#3459 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3459>`_, `#3460 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3460>`_, `#3465 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3465>`_, `#3466 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3466>`_, `#3467 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3467>`_, `#3468 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3468>`_, `#3470 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3470>`_, `#3471 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3471>`_, `#3472 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3472>`_, `#3473 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3473>`_, `#3474 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3474>`_, `#3475 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3475>`_, `#3477 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3477>`_, `#3478 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3478>`_, `#3479 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3479>`_, `#3481 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3481>`_, `#3482 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3482>`_, `#3483 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3483>`_, `#3485 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3485>`_, `#3488 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3488>`_, `#3490 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3490>`_, `#3491 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3491>`_, `#3492 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3492>`_, `#3493 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3493>`_, `#3496 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3496>`_, `#3499 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3499>`_, `#3500 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3500>`_, `#3501 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3501>`_, `#3502 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3502>`_, `#3511 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3511>`_, `#3513 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3513>`_, `#3514 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3514>`_, `#3515 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3515>`_, `#3517 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3517>`_, `#3520 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3520>`_, `#3521 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3521>`_, `#3522 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3522>`_, `#3523 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3523>`_, `#3524 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3524>`_, `#3528 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3528>`_, `#3529 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3529>`_, `#3532 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3532>`_, `#3533 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3533>`_, `#3534 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3534>`_, `#3536 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3536>`_, `#3537 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3537>`_, `#3542 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3542>`_, `#3544 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3544>`_, `#3546 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3546>`_, `#3547 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3547>`_, `#3551 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3551>`_, `#3552 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3552>`_, `#3553 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3553>`_, `#3555 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3555>`_, `#3557 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3557>`_, `#3558 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3558>`_, `#3560 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3560>`_, `#3563 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3563>`_, `#3564 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3564>`_, `#3565 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3565>`_, `#3566 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3566>`_, `#3567 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3567>`_, `#3568 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3568>`_, `#3572 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3572>`_, `#3574 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3574>`_, `#3575 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3575>`_, `#3576 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3576>`_, `#3577 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3577>`_, `#3578 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3578>`_, `#3579 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3579>`_, `#3580 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3580>`_, `#3582 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3582>`_, `#3587 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3587>`_, `#3588 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3588>`_, `#3589 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3589>`_, `#3591 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3591>`_, `#3592 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3592>`_, `#3593 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3593>`_, `#3594 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3594>`_, `#3595 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3595>`_, `#3596 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3596>`_, `#3599 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3599>`_, `#3600 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3600>`_, `#3603 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3603>`_, `#3605 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3605>`_, `#3606 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3606>`_, `#3607 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3607>`_, `#3608 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3608>`_, `#3611 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3611>`_, `#3612 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3612>`_, `#3613 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3613>`_, `#3615 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3615>`_, `#3616 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3616>`_, `#3617 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3617>`_, `#3618 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3618>`_, `#3619 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3619>`_, `#3620 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3620>`_, `#3621 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3621>`_, `#3623 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3623>`_, `#3624 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3624>`_, `#3625 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3625>`_, `#3626 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3626>`_, `#3628 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3628>`_, `#3630 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3630>`_, `#3631 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3631>`_, `#3632 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3632>`_, `#3634 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3634>`_, `#3635 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3635>`_, `#3637 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3637>`_, `#3638 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3638>`_, `#3640 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3640>`_, `#3642 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3642>`_, `#3645 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3645>`_, `#3646 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3646>`_, `#3647 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3647>`_, `#3648 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3648>`_, `#3649 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3649>`_, `#3651 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3651>`_, `#3653 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3653>`_, `#3654 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3654>`_, `#3655 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3655>`_, `#3656 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3656>`_, `#3657 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3657>`_, `#3658 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3658>`_, `#3662 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3662>`_, `#3667 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3667>`_, `#3669 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3669>`_, `#3670 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3670>`_, `#3671 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3671>`_, `#3672 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3672>`_, `#3674 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3674>`_, `#3675 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3675>`_, `#3676 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3676>`_, `#3678 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3678>`_, `#3679 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3679>`_, `#3681 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3681>`_, `#3683 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3683>`_, `#3686 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3686>`_, `#3687 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3687>`_, `#3691 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3691>`_, `#3692 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3692>`_, `#3699 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3699>`_, `#3700 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3700>`_, `#3701 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3701>`_, `#3702 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3702>`_, `#3703 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3703>`_, `#3704 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3704>`_, `#3705 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3705>`_, `#3707 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3707>`_, `#3708 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3708>`_, `#3709 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3709>`_, `#3711 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3711>`_, `#3713 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3713>`_, `#3714 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3714>`_, `#3715 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3715>`_, `#3717 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3717>`_, `#3718 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3718>`_, `#3722 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3722>`_, `#3723 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3723>`_, `#3727 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3727>`_, `#3728 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3728>`_, `#3729 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3729>`_, `#3730 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3730>`_, `#3731 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3731>`_, `#3732 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3732>`_, `#3734 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3734>`_, `#3735 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3735>`_, `#3736 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3736>`_, `#3741 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3741>`_, `#3743 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3743>`_, `#3744 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3744>`_, `#3745 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3745>`_, `#3746 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3746>`_, `#3751 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3751>`_, `#3759 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3759>`_, `#3760 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3760>`_, `#3763 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3763>`_, `#3773 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3773>`_, `#3781 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3781>`_
357
358
359Release 1.15.1
360''''''''''''''
361
362Misc/Other
363----------
364
365- `#3469 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3469>`_, `#3608 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3608>`_
366
367
368Release 1.15.0 (2020-10-13)
369'''''''''''''''''''''''''''
370
371Features
372--------
373
374- PyPy is now a supported platform. (`#1792 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1792>`_)
375- allmydata.testing.web, a new module, now offers a supported Python API for testing Tahoe-LAFS web API clients. (`#3317 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3317>`_)
376
377
378Bug Fixes
379---------
380
381- Make directory page links work. (`#3312 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3312>`_)
382- Use last known revision of Chutney that is known to work with Python 2 for Tor integration tests. (`#3348 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3348>`_)
383- Mutable files now use RSA exponent 65537 (`#3349 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3349>`_)
384
385
386Dependency/Installation Changes
387-------------------------------
388
389- Tahoe-LAFS now supports CentOS 8 and no longer supports CentOS 7. (`#3296 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3296>`_)
390- Tahoe-LAFS now supports Ubuntu 20.04. (`#3328 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3328>`_)
391
392
393Removed Features
394----------------
395
396- The Magic Folder frontend has been split out into a stand-alone project.  The functionality is no longer part of Tahoe-LAFS itself.  Learn more at <https://github.com/LeastAuthority/magic-folder>. (`#3284 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3284>`_)
397- Slackware 14.2 is no longer a Tahoe-LAFS supported platform. (`#3323 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3323>`_)
398
399
400Other Changes
401-------------
402
403- The Tahoe-LAFS project has adopted a formal code of conduct. (`#2755 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2755>`_)
404-  (`#3263 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3263>`_, `#3324 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3324>`_)
405- The "coverage" tox environment has been replaced by the "py27-coverage" and "py36-coverage" environments. (`#3355 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3355>`_)
406
407
408Misc/Other
409----------
410
411- `#3247 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3247>`_, `#3254 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3254>`_, `#3277 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3277>`_, `#3278 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3278>`_, `#3287 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3287>`_, `#3288 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3288>`_, `#3289 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3289>`_, `#3290 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3290>`_, `#3291 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3291>`_, `#3292 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3292>`_, `#3293 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3293>`_, `#3294 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3294>`_, `#3297 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3297>`_, `#3298 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3298>`_, `#3299 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3299>`_, `#3300 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3300>`_, `#3302 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3302>`_, `#3303 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3303>`_, `#3304 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3304>`_, `#3305 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3305>`_, `#3306 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3306>`_, `#3308 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3308>`_, `#3309 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3309>`_, `#3313 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3313>`_, `#3315 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3315>`_, `#3316 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3316>`_, `#3320 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3320>`_, `#3325 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3325>`_, `#3326 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3326>`_, `#3329 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3329>`_, `#3330 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3330>`_, `#3331 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3331>`_, `#3332 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3332>`_, `#3333 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3333>`_, `#3334 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3334>`_, `#3335 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3335>`_, `#3336 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3336>`_, `#3338 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3338>`_, `#3339 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3339>`_, `#3340 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3340>`_, `#3341 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3341>`_, `#3342 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3342>`_, `#3343 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3343>`_, `#3344 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3344>`_, `#3346 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3346>`_, `#3351 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3351>`_, `#3353 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3353>`_, `#3354 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3354>`_, `#3356 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3356>`_, `#3357 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3357>`_, `#3358 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3358>`_, `#3359 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3359>`_, `#3361 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3361>`_, `#3364 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3364>`_, `#3365 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3365>`_, `#3366 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3366>`_, `#3367 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3367>`_, `#3368 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3368>`_, `#3370 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3370>`_, `#3372 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3372>`_, `#3373 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3373>`_, `#3374 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3374>`_, `#3375 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3375>`_, `#3376 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3376>`_, `#3377 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3377>`_, `#3378 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3378>`_, `#3380 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3380>`_, `#3381 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3381>`_, `#3382 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3382>`_, `#3383 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3383>`_, `#3386 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3386>`_, `#3387 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3387>`_, `#3388 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3388>`_, `#3389 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3389>`_, `#3391 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3391>`_, `#3392 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3392>`_, `#3393 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3393>`_, `#3394 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3394>`_, `#3395 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3395>`_, `#3396 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3396>`_, `#3397 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3397>`_, `#3398 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3398>`_, `#3401 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3401>`_, `#3403 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3403>`_, `#3406 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3406>`_, `#3408 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3408>`_, `#3409 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3409>`_, `#3411 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3411>`_, `#3415 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3415>`_, `#3416 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3416>`_, `#3417 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3417>`_, `#3421 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3421>`_, `#3422 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3422>`_, `#3423 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3423>`_, `#3424 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3424>`_, `#3425 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3425>`_, `#3426 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3426>`_, `#3427 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3427>`_, `#3429 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3429>`_, `#3430 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3430>`_, `#3431 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3431>`_, `#3436 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3436>`_, `#3437 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3437>`_, `#3438 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3438>`_, `#3439 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3439>`_, `#3440 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3440>`_, `#3442 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3442>`_, `#3443 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3443>`_, `#3446 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3446>`_, `#3448 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3448>`_, `#3449 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3449>`_, `#3450 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3450>`_, `#3451 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3451>`_, `#3452 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3452>`_, `#3453 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3453>`_, `#3455 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3455>`_, `#3456 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3456>`_, `#3458 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3458>`_, `#3462 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3462>`_, `#3463 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3463>`_, `#3464 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3464>`_
412
413
414Release 1.14.0 (2020-03-11)
415'''''''''''''''''''''''''''
416
417Features
418--------
419
420- Magic-Folders are now supported on macOS. (`#1432 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1432>`_)
421- Add a "tox -e draftnews" which runs towncrier in draft mode (`#2942 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2942>`_)
422- Fedora 29 is now tested as part of the project's continuous integration system. (`#2955 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2955>`_)
423- The Magic-Folder frontend now emits structured, causal logs.  This makes it easier for developers to make sense of its behavior and for users to submit useful debugging information alongside problem reports. (`#2972 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2972>`_)
424- The `tahoe` CLI now accepts arguments for configuring structured logging messages which Tahoe-LAFS is being converted to emit.  This change does not introduce any new defaults for on-filesystem logging. (`#2975 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2975>`_)
425- The web API now publishes streaming Eliot logs via a token-protected WebSocket at /private/logs/v1. (`#3006 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3006>`_)
426- End-to-end in-memory tests for websocket features (`#3041 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3041>`_)
427- allmydata.interfaces.IFoolscapStoragePlugin has been introduced, an extension point for customizing the storage protocol. (`#3049 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3049>`_)
428- Static storage server "announcements" in ``private/servers.yaml`` are now individually logged and ignored if they cannot be interpreted. (`#3051 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3051>`_)
429- Storage servers can now be configured to load plugins for allmydata.interfaces.IFoolscapStoragePlugin and offer them to clients. (`#3053 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3053>`_)
430- Storage clients can now be configured to load plugins for allmydata.interfaces.IFoolscapStoragePlugin and use them to negotiate with servers. (`#3054 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3054>`_)
431- The [storage] configuration section now accepts a boolean *anonymous* item to enable or disable anonymous storage access.  The default behavior remains unchanged. (`#3184 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3184>`_)
432- Enable the helper when creating a node with `tahoe create-node --helper` (`#3235 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3235>`_)
433
434
435Bug Fixes
436---------
437
438- refactor initialization code to be more async-friendly (`#2870 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2870>`_)
439- Configuration-checking code wasn't being called due to indenting (`#2935 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2935>`_)
440- refactor configuration handling out of Node into _Config (`#2936 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2936>`_)
441- "tox -e codechecks" no longer dirties the working tree. (`#2941 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2941>`_)
442- Updated the Tor release key, used by the integration tests. (`#2944 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2944>`_)
443- `tahoe backup` no longer fails with an unhandled exception when it encounters a special file (device, fifo) in the backup source. (`#2950 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2950>`_)
444- Magic-Folders now creates spurious conflict files in fewer cases.  In particular, if files are added to the folder while a client is offline, that client will not create conflict files for all those new files when it starts up. (`#2965 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2965>`_)
445- The confusing and misplaced sub-command group headings in `tahoe --help` output have been removed. (`#2976 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2976>`_)
446- The Magic-Folder frontend is now more responsive to subtree changes on Windows. (`#2997 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2997>`_)
447- remove ancient bundled jquery and d3, and the "dowload timeline" feature they support (`#3228 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3228>`_)
448
449
450Dependency/Installation Changes
451-------------------------------
452
453- Tahoe-LAFS no longer makes start-up time assertions about the versions of its dependencies.  It is the responsibility of the administrator of the installation to ensure the correct version of dependencies are supplied. (`#2749 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2749>`_)
454- Tahoe-LAFS now depends on Twisted 16.6 or newer. (`#2957 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2957>`_)
455
456
457Removed Features
458----------------
459
460- "tahoe rm", an old alias for "tahoe unlink", has been removed. (`#1827 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1827>`_)
461- The direct dependencies on pyutil and zbase32 have been removed. (`#2098 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2098>`_)
462- Untested and unmaintained code for running Tahoe-LAFS as a Windows service has been removed. (`#2239 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2239>`_)
463- The redundant "pypywin32" dependency has been removed. (`#2392 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2392>`_)
464- Fedora 27 is no longer tested as part of the project's continuous integration system. (`#2955 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2955>`_)
465- "tahoe start", "tahoe daemonize", "tahoe restart", and "tahoe stop" are now deprecated in favor of using "tahoe run", possibly with a third-party process manager. (`#3273 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3273>`_)
466
467
468Other Changes
469-------------
470
471- Tahoe-LAFS now tests for PyPy compatibility on CI. (`#2479 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2479>`_)
472- Tahoe-LAFS now requires Twisted 18.4.0 or newer. (`#2771 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2771>`_)
473- Tahoe-LAFS now uses towncrier to maintain the NEWS file. (`#2908 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2908>`_)
474- The release process document has been updated. (`#2920 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2920>`_)
475- allmydata.test.test_system.SystemTest is now more reliable with respect to bound address collisions. (`#2933 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2933>`_)
476- The Tox configuration has been fixed to work around a problem on Windows CI. (`#2956 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2956>`_)
477- The PyInstaller CI job now works around a pip/pyinstaller incompatibility. (`#2958 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2958>`_)
478- Some CI jobs for integration tests have been moved from TravisCI to CircleCI. (`#2959 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2959>`_)
479- Several warnings from a new release of pyflakes have been fixed. (`#2960 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2960>`_)
480- Some Slackware 14.2 continuous integration problems have been resolved. (`#2961 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2961>`_)
481- Some macOS continuous integration failures have been fixed. (`#2962 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2962>`_)
482- The NoNetworkGrid implementation has been somewhat improved. (`#2966 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2966>`_)
483- A bug in the test suite for the create-alias command has been fixed. (`#2967 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2967>`_)
484- The integration test suite has been updated to use pytest-twisted instead of deprecated pytest APIs. (`#2968 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2968>`_)
485- The magic-folder integration test suite now performs more aggressive cleanup of the processes it launches. (`#2969 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2969>`_)
486- The integration tests now correctly document the `--keep-tempdir` option. (`#2970 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2970>`_)
487- A misuse of super() in the integration tests has been fixed. (`#2971 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2971>`_)
488- Several utilities to facilitate the use of the Eliot causal logging library have been introduced. (`#2973 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2973>`_)
489- The Windows CI configuration has been tweaked. (`#2974 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2974>`_)
490- The Magic-Folder frontend has had additional logging improvements. (`#2977 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2977>`_)
491-  (`#2981 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2981>`_, `#2982 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2982>`_)
492- Added a simple sytax checker so that once a file has reached python3 compatibility, it will not regress. (`#3001 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3001>`_)
493- Converted all uses of the print statement to the print function in the ./misc/ directory. (`#3002 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3002>`_)
494- The contributor guidelines are now linked from the GitHub pull request creation page. (`#3003 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3003>`_)
495- Updated the testing code to use the print function instead of the print statement. (`#3008 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3008>`_)
496- Replaced print statement with print fuction for all tahoe_* scripts. (`#3009 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3009>`_)
497- Replaced all remaining instances of the print statement with the print function. (`#3010 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3010>`_)
498- Replace StringIO imports with six.moves. (`#3011 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3011>`_)
499- Updated all Python files to use PEP-3110 exception syntax for Python3 compatibility. (`#3013 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3013>`_)
500- Update raise syntax for Python3 compatibility. (`#3014 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3014>`_)
501- Updated instances of octal literals to use the format 0o123 for Python3 compatibility. (`#3015 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3015>`_)
502- allmydata.test.no_network, allmydata.test.test_system, and allmydata.test.web.test_introducer are now more reliable with respect to bound address collisions. (`#3016 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3016>`_)
503- Removed tuple unpacking from function and lambda definitions for Python3 compatibility. (`#3019 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3019>`_)
504- Updated Python2 long numeric literals for Python3 compatibility. (`#3020 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3020>`_)
505- CircleCI jobs are now faster as a result of pre-building configured Docker images for the CI jobs. (`#3024 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3024>`_)
506- Removed used of backticks for "repr" for Python3 compatibility. (`#3027 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3027>`_)
507- Updated string literal syntax for Python3 compatibility. (`#3028 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3028>`_)
508- Updated CI to enforce Python3 syntax for entire repo. (`#3030 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3030>`_)
509- Replaced pycryptopp with cryptography. (`#3031 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3031>`_)
510- All old-style classes ported to new-style. (`#3042 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3042>`_)
511- Whitelisted "/bin/mv" as command for codechecks performed by tox. This fixes a current warning and prevents future errors (for tox 4). (`#3043 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3043>`_)
512- Progress towards Python 3 compatibility is now visible at <https://tahoe-lafs.github.io/tahoe-depgraph/>. (`#3152 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3152>`_)
513- Collect coverage information from integration tests (`#3234 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3234>`_)
514- NixOS is now a supported Tahoe-LAFS platform. (`#3266 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3266>`_)
515
516
517Misc/Other
518----------
519
520- `#1893 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1893>`_, `#2266 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2266>`_, `#2283 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2283>`_, `#2766 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2766>`_, `#2980 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2980>`_, `#2985 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2985>`_, `#2986 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2986>`_, `#2987 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2987>`_, `#2988 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2988>`_, `#2989 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2989>`_, `#2990 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2990>`_, `#2991 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2991>`_, `#2992 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2992>`_, `#2995 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2995>`_, `#3000 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3000>`_, `#3004 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3004>`_, `#3005 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3005>`_, `#3007 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3007>`_, `#3012 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3012>`_, `#3017 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3017>`_, `#3021 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3021>`_, `#3023 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3023>`_, `#3025 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3025>`_, `#3026 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3026>`_, `#3029 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3029>`_, `#3036 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3036>`_, `#3038 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3038>`_, `#3048 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3048>`_, `#3086 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3086>`_, `#3097 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3097>`_, `#3111 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3111>`_, `#3118 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3118>`_, `#3119 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3119>`_, `#3227 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3227>`_, `#3229 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3229>`_, `#3232 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3232>`_, `#3233 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3233>`_, `#3237 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3237>`_, `#3238 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3238>`_, `#3239 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3239>`_, `#3240 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3240>`_, `#3242 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3242>`_, `#3243 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3243>`_, `#3245 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3245>`_, `#3246 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3246>`_, `#3248 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3248>`_, `#3250 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3250>`_, `#3252 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3252>`_, `#3255 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3255>`_, `#3256 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3256>`_, `#3259 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3259>`_, `#3261 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3261>`_, `#3262 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3262>`_, `#3263 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3263>`_, `#3264 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3264>`_, `#3265 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3265>`_, `#3267 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3267>`_, `#3268 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3268>`_, `#3271 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3271>`_, `#3272 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3272>`_, `#3274 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3274>`_, `#3275 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3275>`_, `#3276 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3276>`_, `#3279 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3279>`_, `#3281 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3281>`_, `#3282 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3282>`_, `#3285 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3285>`_
521
522
523Release 1.13.0 (05-August-2018)
524'''''''''''''''''''''''''''''''
525
526New Features
527------------
528
529The ``tahoe list-aliases`` command gained the ``--readonly-uri``
530option in `PR400`_, which lists read-only capabilities (the default
531shows read/write capabilities if available). This command also gained
532a ``--json`` option in `PR452`_, providing machine-readable output.
533
534A new command ``tahoe status`` is added, showing some statistics and
535currently active operations (similar to the ``/status`` page in the
536Web UI). See also `PR502`_.
537
538Immutable uploads now use the "servers of happiness" algorithm for
539uploading shares. This means better placement of shares on available
540servers. See `PR416`_.
541
542To join a new client to a grid, the command ``tahoe invite`` was
543added. This uses `magic wormhole`_ to connect two computers and
544exchange the required information to start the client. The "client
545side" of this command is the also new option ``tahoe
546create-client --join=``. Together, this provides a way to provision a
547new client without having to securely transmit the fURL and other
548details. `PR418`_
549
550``tahoe backup`` now reports progress. `PR474`_
551
552The ``tub.port=`` option can now accept ``listen:i2p`` or
553``listen:tor`` options to use popular anonymity networks with storage
554servers. See `PR437`_
555
556The place where storage servers put shares (the "storage path") is now
557configurable (`PR472`_).
558
559A PyInstaller-based build is now available (`PR421`_). A "Docker
560compose" setup for development purposes is now available (`PR445`_).
561
562There is now a recommended workflow for Zcash-based donations to support
563storage server operators (`PR506`_).
564
565Bug Fixes in Core
566-----------------
567
568Some bugs with pidfile handling were fixed (`PR440`_ and `PR450`_)
569meaning invalid pidfiles are now deleted. Error-messages related to
570``tahoe.cfg`` now include the full path to the file. `PR501`_ fixes
571"address already in use" test failures. `PR502`_ fixes ticket #2926
572("tahoe status" failures). `PR487`_ fixes ticket #1455 (setting
573``X-Frame-Options: DENY``)
574
575
576Web UI Changes
577--------------
578
579We set the "Referrer-Policy: no-referrer" header on all requests. The
580Welcome page now understands the JSON option (`PR430`_) and OPTIONS
581requests are handled (`PR447`_).
582
583
584Magic Folder Changes
585--------------------
586
587Multiple magic-folders in a single Tahoe client are now
588supported. Bugs with ``.backup`` files have been fixed, meaning
589spurious ``.backup`` files will be produced less often (`PR448`_,
590`PR475`_). Handling of default umask on new magic-folder files is
591fixed in `PR458`_. The user mtime value is now correctly preserved
592(`PR457`_).
593
594A bug in ``tahoe magic-folder status`` causing active operations to
595sometimes not show up is fixed (`PR461`_). If a directory is missing,
596it is created (`PR492`_).
597
598
599Raw Pull Requests
600-----------------
601
602In total, 50 Pull Requests were merged for this release, including
603contributions of code or review from 15 different GitHub users. Thanks
604everyone! A complete list of these PRs and contributions:
605
606`PR380`_: `daira`_
607`PR400`_: `meejah`_ (with `warner`_)
608`PR403`_: `meejah`_
609`PR405`_: `meejah`_ (with `warner`_)
610`PR406`_: `meejah`_ (with `warner`_)
611`PR407`_: `david415`_ (with `meejah`_, `warner`_)
612`PR409`_: `str4d`_ (with `warner`_)
613`PR410`_: `tpltnt`_ (with `warner`_)
614`PR411`_: `tpltnt`_ (with `warner`_, `meejah`_)
615`PR412`_: `tpltnt`_ (with `warner`_)
616`PR414`_: `tpltnt`_ (with `meejah`_, `warner`_)
617`PR416`_: `david415`_, `meejah`_, `markberger`_, `warner`_
618`PR417`_: `meejah`_ (with `pataquets`_, `warner`_)
619`PR418`_: `meejah`_ (with `crwood`_, `exarkun`_, `warner`_)
620`PR419`_: `tpltnt`_ (with `warner`_)
621`PR420`_: `ValdikSS`_ (with `warner`_)
622`PR421`_: `crwood`_ (with `meejah`_, `warner`_)
623`PR423`_: `warner`_
624`PR428`_: `warner`_
625`PR429`_: `exarkun`_ (with `warner`_)
626`PR430`_: `david415`_, `exarkun`_ (with `warner`_)
627`PR432`_: `exarkun`_ (with `meejah`_)
628`PR433`_: `exarkun`_ (with `warner`_)
629`PR434`_: `exarkun`_ (with `warner`_)
630`PR437`_: `warner`_
631`PR438`_: `warner`_ (with `meejah`_)
632`PR440`_: `exarkun`_, `lpirl`_ (with `meejah`_)
633`PR444`_: `AnBuKu`_ (with `warner`_)
634`PR445`_: `bookchin`_ (with `warner`_)
635`PR447`_: `meejah`_ (with `tpltnt`_, `meejah`_)
636`PR448`_: `meejah`_ (with `warner`_)
637`PR450`_: `exarkun`_, `meejah`_, `lpirl`_
638`PR452`_: `meejah`_ (with `tpltnt`_)
639`PR453`_: `meejah`_
640`PR454`_: `meejah`_ (with `tpltnt`_, `meejah`_, `warner`_)
641`PR455`_: `tpltnt`_ (with `meejah`_)
642`PR456`_: `meejah`_ (with `meejah`_)
643`PR457`_: `meejah`_ (with `crwood`_, `tpltnt`_)
644`PR458`_: `meejah`_ (with `tpltnt`_)
645`PR460`_: `tpltnt`_ (with `exarkun`_, `meejah`_)
646`PR462`_: `meejah`_ (with `crwood`_)
647`PR464`_: `meejah`_
648`PR470`_: `meejah`_ (with `exarkun`_, `tpltnt`_, `warner`_)
649`PR472`_: `exarkun`_, `meskio`_
650`PR474`_: `exarkun`_
651`PR475`_: `meejah`_ (with `exarkun`_)
652`PR482`_: `crwood`_ (with `warner`_)
653`PR485`_: `warner`_
654`PR486`_: `exarkun`_ (with `warner`_)
655`PR487`_: `exarkun`_ (with `tpltnt`_)
656`PR489`_: `exarkun`_
657`PR490`_: `exarkun`_
658`PR491`_: `exarkun`_ (with `meejah`_)
659`PR492`_: `exarkun`_ (with `meejah`_, `tpltnt`_)
660`PR493`_: `exarkun`_ (with `meejah`_)
661`PR494`_: `exarkun`_ (with `meejah`_)
662`PR497`_: `meejah`_ (with `multikatt`_, `exarkun`_)
663`PR499`_: `exarkun`_ (with `meejah`_)
664`PR501`_: `exarkun`_ (with `meejah`_)
665`PR502`_: `exarkun`_ (with `meejah`_)
666`PR506`_: `exarkun`_ (with `crwood`_, `nejucomo`_)
667
668
669Developer and Internal Changes
670------------------------------
671
672People hacking on Tahoe-LAFS code will be interested in some internal
673improvements which shouldn't have any user-visible effects:
674
675* internal: skip some unicode tests on non-unicode platforms #2912
676* internal: tox: pre-install Incremental to workaround setuptools bug #2913
677* internal: fix PyInstaller builds `PR482`_
678* internal: use @implementer instead of implements `PR406`_
679* internal: improve happiness integration test #2895 `PR432`_
680* web internal: refactor response-format (?t=) logic #2893 `PR429`_
681* internal: fix pyflakes issues #2898 `PR434`_
682* internal: setup.py use find_packages #2897 `PR433`_
683* internal: ValueOrderedDict fixes #2891
684* internal: remove unnused NumDict #2891 `PR438`_
685* internal: setup.py use python_requires= so tox3 works #2876
686* internal: rewrite tahoe stop/start/daemonize refs #1148 #275 #1121 #1377 #2149 #719 `PR417`_
687* internal: add docs links to RFCs/etc `PR456`_
688* internal: magic-folder test improvement `PR453`_
689* internal: pytest changes `PR462`_
690* internal: upload appveyor generated wheels as artifacts #2903
691* internal: fix tox-vs-setuptools-upgrade #2910
692* deps: require txi2p>=0.3.2 to work around TLS who-is-client issue #2861 `PR409`_
693* deps: now need libyaml-dev from system before build `PR420`_
694* deps: twisted>=16.4.0 for "python -m twisted.trial" `PR454`_
695* deps: pin pypiwin32 to 219 until upstream bug resolved `PR464`_
696* deps: setuptools >=28.8.0 for something `PR470`_
697* deps: use stdlib "json" instead of external "simplejson" #2766 `PR405`_
698* complain more loudly in setup.py under py3 `PR414`_
699* rename "filesystem" to "file store" #2345 `PR380`_
700* replace deprecated twisted.web.client with treq #2857 `PR428`_
701* improve/stablize some test coverage #2891
702* TODO: can we remove this now? pypiwin32 is now at 223
703* use secure mkstemp() `PR460`_
704* test "tahoe list-aliases --readonly-uri" #2863 `PR403`_
705* #455: remove outdated comment
706* `PR407`_ fix stopService calls
707* `PR410`_ explicit python2.7 virtualenv
708* `PR419`_ fix list of supported OSes
709* `PR423`_ switch travis to a supported Ubuntu
710* deps: no longer declare a PyCrypto dependency (actual use vanished long ago) `PR514`_
711
712
713
714.. _PR380: https://github.com/tahoe-lafs/tahoe-lafs/pull/380
715.. _PR400: https://github.com/tahoe-lafs/tahoe-lafs/pull/400
716.. _PR403: https://github.com/tahoe-lafs/tahoe-lafs/pull/403
717.. _PR405: https://github.com/tahoe-lafs/tahoe-lafs/pull/405
718.. _PR406: https://github.com/tahoe-lafs/tahoe-lafs/pull/406
719.. _PR407: https://github.com/tahoe-lafs/tahoe-lafs/pull/407
720.. _PR409: https://github.com/tahoe-lafs/tahoe-lafs/pull/409
721.. _PR410: https://github.com/tahoe-lafs/tahoe-lafs/pull/410
722.. _PR412: https://github.com/tahoe-lafs/tahoe-lafs/pull/412
723.. _PR414: https://github.com/tahoe-lafs/tahoe-lafs/pull/414
724.. _PR416: https://github.com/tahoe-lafs/tahoe-lafs/pull/416
725.. _PR417: https://github.com/tahoe-lafs/tahoe-lafs/pull/417
726.. _PR418: https://github.com/tahoe-lafs/tahoe-lafs/pull/418
727.. _PR419: https://github.com/tahoe-lafs/tahoe-lafs/pull/419
728.. _PR420: https://github.com/tahoe-lafs/tahoe-lafs/pull/420
729.. _PR421: https://github.com/tahoe-lafs/tahoe-lafs/pull/421
730.. _PR423: https://github.com/tahoe-lafs/tahoe-lafs/pull/423
731.. _PR428: https://github.com/tahoe-lafs/tahoe-lafs/pull/428
732.. _PR429: https://github.com/tahoe-lafs/tahoe-lafs/pull/429
733.. _PR430: https://github.com/tahoe-lafs/tahoe-lafs/pull/430
734.. _PR432: https://github.com/tahoe-lafs/tahoe-lafs/pull/432
735.. _PR433: https://github.com/tahoe-lafs/tahoe-lafs/pull/433
736.. _PR434: https://github.com/tahoe-lafs/tahoe-lafs/pull/434
737.. _PR437: https://github.com/tahoe-lafs/tahoe-lafs/pull/437
738.. _PR438: https://github.com/tahoe-lafs/tahoe-lafs/pull/438
739.. _PR440: https://github.com/tahoe-lafs/tahoe-lafs/pull/440
740.. _PR444: https://github.com/tahoe-lafs/tahoe-lafs/pull/444
741.. _PR445: https://github.com/tahoe-lafs/tahoe-lafs/pull/445
742.. _PR447: https://github.com/tahoe-lafs/tahoe-lafs/pull/447
743.. _PR448: https://github.com/tahoe-lafs/tahoe-lafs/pull/448
744.. _PR450: https://github.com/tahoe-lafs/tahoe-lafs/pull/450
745.. _PR452: https://github.com/tahoe-lafs/tahoe-lafs/pull/452
746.. _PR453: https://github.com/tahoe-lafs/tahoe-lafs/pull/453
747.. _PR454: https://github.com/tahoe-lafs/tahoe-lafs/pull/454
748.. _PR456: https://github.com/tahoe-lafs/tahoe-lafs/pull/456
749.. _PR457: https://github.com/tahoe-lafs/tahoe-lafs/pull/457
750.. _PR458: https://github.com/tahoe-lafs/tahoe-lafs/pull/458
751.. _PR460: https://github.com/tahoe-lafs/tahoe-lafs/pull/460
752.. _PR462: https://github.com/tahoe-lafs/tahoe-lafs/pull/462
753.. _PR464: https://github.com/tahoe-lafs/tahoe-lafs/pull/464
754.. _PR470: https://github.com/tahoe-lafs/tahoe-lafs/pull/470
755.. _PR472: https://github.com/tahoe-lafs/tahoe-lafs/pull/472
756.. _PR474: https://github.com/tahoe-lafs/tahoe-lafs/pull/474
757.. _PR482: https://github.com/tahoe-lafs/tahoe-lafs/pull/482
758.. _PR502: https://github.com/tahoe-lafs/tahoe-lafs/pull/502
759.. _PR506: https://github.com/tahoe-lafs/tahoe-lafs/pull/506
760.. _PR514: https://github.com/tahoe-lafs/tahoe-lafs/pull/514
761.. _AnBuKu: https://github.com/AnBuKu
762.. _ValdikSS: https://github.com/ValdikSS
763.. _bookchin: https://github.com/bookchin
764.. _crwood: https://github.com/crwood
765.. _nejucomo: https://github.com/nejucomo
766.. _daira: https://github.com/daira
767.. _david415: https://github.com/david415
768.. _exarkun: https://github.com/exarkun
769.. _lpirl: https://github.com/lpirl
770.. _markberger: https://github.com/markberger
771.. _meejah: https://github.com/meejah
772.. _meskio: https://github.com/meskio
773.. _multikatt: https://github.com/multikatt
774.. _pataquets: https://github.com/pataquets
775.. _str4d: https://github.com/str4d
776.. _tpltnt: https://github.com/tpltnt
777.. _warner: https://github.com/warner
778
779
780
781
782Release 1.12.1 (18-Jan-2017)
783''''''''''''''''''''''''''''
784
785This fixes a few small problems discovered just after 1.12.0 was released.
786
787* ``introducers.yaml`` was entirely broken (due to a unicode-vs-ascii
788  problem), and the documentation recommended an invalid syntax. Both have
789  been fixed. (#2862)
790* Creating a node with ``--hide-ip`` shouldn't set ``tcp = tor`` if txtorcon
791  is unavailable. I2P-only systems should get ``tcp = disabled``. (#2860)
792* As a result, we now require foolscap-0.12.6 .
793* setup.py now creates identical wheels on win32 and unix. Previously wheels
794  created on windows got an unconditional dependency upon ``pypiwin32``,
795  making them uninstallable on unix. Now that dependency is marked as
796  ``sys_platform=win32`` only. (#2763)
797
798Some other small changes include:
799
800* The deep-stats t=json response now includes an "api-version" field,
801  currently set to 1. (#567)
802* WUI Directory listings use ``rel=noreferrer`` to avoid leaking the dircap
803  to the JS contents of the target file. (#151, #378)
804* Remove the dependency on ``shutilwhich`` (#2856)
805
806
807Release 1.12.0 (17-Dec-2016)
808''''''''''''''''''''''''''''
809
810New Features
811------------
812
813This release features improved Tor/I2P integration. It is now easy to::
814
815* use Tor to hide your IP address during external network activity
816* connect to Tor/I2P-based storage servers
817* run an Introducer or a storage node as a Tor "onion service"
818
819See docs/anonymity-configuration.rst for instructions and new node-creation
820arguments (--hide-ip, --listen=tor), which include ways to use SOCKS servers
821for outbound connections. Tor/I2P/Socks support requires extra python
822libraries to be installed (e.g. 'pip install tahoe-lafs[tor]'), as well as
823matching (non-python) daemons available on the host system. (tickets #517,
824#2490, #2838)
825
826Nodes can use multiple introducers by adding entries to a new
827``private/introducers.yaml`` file, or stop using introduction entirely by
828omitting the ``introducer.furl`` key from tahoe.cfg (introducerless clients
829will need static servers configured to connect anywhere). Server
830announcements are sent to all connected Introducers, and clients merge all
831announcements they see, which can improve grid reliability. (#68)
832
833In addition, nodes now cache the announcements they receive in a YAML file,
834and use their cached information at startup until the Introducer connection
835is re-established. This makes nodes more tolerant of Introducers that are
836temporarily offline. Nodes admins can copy text from the cache into a new
837``private/servers.yaml`` file to add "static servers", which augment/override
838what the Introducer offers. This can modify aspects of the server, or use
839servers that were never announced in the first place. (#2788)
840
841Nodes now use a separate Foolscap "Tub" for each server connection, so
842``servers.yaml`` can override the connection rules (Tor vs direct-TCP) for
843each one independently. This offers a slight privacy improvement, but slows
844down connections slightly (perhaps 75ms per server), and breaks an obscure
845NAT-bypass trick which enabled storage servers to run behind NAT boxes (but
846only when all the *clients* of the storage server had public IP addresses,
847and were also configured as servers). (#2759, #517)
848
849"Magic Folders" is an experimental two-way directory synchronization tool,
850contributed by Least Authority Enterprises, which replaces the previous
851experimental (one-way) "drop-upload" feature. This allows multiple users to
852keep a single directory in-sync, using Tahoe as the backing store. See
853docs/frontends/magic-folder.rst for details and configuration instructions.
854
855Compatibility Issues
856--------------------
857
858The old version-1 Introducer protocol has been removed. Tahoe has used the
859version-2 protocol since 1.10 (released in 2013), but all nodes (clients,
860servers, and the Introducer itself) provided backwards-compatibility
861translations when encountering older peers. These translations were finally
862removed, so Tahoe nodes at 1.12 or later will not be able to interact with
863nodes at 1.9 or older. (#2784)
864
865The versions of Tahoe (1.11.0) and Foolscap (0.6.5) that shipped in
866Debian/Jesse (the most recent stable release, as of December 2016) are
867regrettably not forwards-compatible with this new version. Nodes running
868Jesse will not be able to connect to servers or introducers created with this
869release because they cannot parse the new ``tcp:HOST:PORT`` hint syntax (this
870syntax has been around for a while, but this is the first Tahoe release to
871automatically generate such hints). If you need to work around this, then
872after creating your new node, edit the tahoe.cfg of your new
873server/introducer: in ``[node] tub.location``, make each connection hint look
874like ``HOST:PORT`` instead of ``tcp:HOST:PORT``. If your grid only has nodes
875with Foolscap-0.7.0 or later, you will not need this workaround. (#2831)
876
877Nodes now use an Ed25519 public key as a serverid, instead of a Foolscap "tub
878id", so status displays will report a different serverid after upgrade. For
879the most part this should be self-consistent, however if you have an old
880(1.11) client talking to a new (1.12) Helper, then the client's upload
881results (on the "Recent Uploads And Downloads" web page) will show unusual
882server ids. (#1363)
883
884Dependency/Installation changes
885-------------------------------
886
887Tahoe now requires Twisted >= 16.1.0, so ensure that unit tests do not fail
888because of uncancelled timers left running by HostnameEndpoint. It also
889requires the Tor/I2P supporting code from Foolscap >= 0.12.5 . (#2781)
890
891Configuration Changes
892---------------------
893
894Some small changes were made to the way Tahoe-LAFS is configured, via
895``tahoe.cfg`` and other files. In general, node behavior should now be more
896predictable, and errors should be surfaced earlier.
897
898* ``tub.port`` is now an Endpoint server specification string (which is
899  pretty much just like a strports string, but can be extended by plugins).
900  It now rejects "tcp:0" and "0". The tahoe.cfg value overrides anything
901  stored on disk (in client.port). This should have no effect on most old
902  nodes (which did not set tub.port in tahoe.cfg, and which wrote an
903  allocated port number to client.port the first time they launched). Folks
904  who want to listen on a specific port number typically set tub.port to
905  "tcp:12345" or "12345", not "0". (ticket #2491)
906* This should enable IPv6 on servers, either via AAAA records or colon-hex
907  addresses. (#2827)
908* The "portnumfile" (e.g. NODEDIR/client.port) is written as soon as the port
909  is allocated, before the tub is created, and only if "tub.port" was empty.
910  The old code wrote to it unconditionally, and after Tub startup. So if the
911  user allows NODEDIR/client.port to be written, then later modifies
912  tahoe.cfg to set "tub.port" to a different value, this difference will
913  persist (and the node will honor tahoe.cfg "tub.port" exclusively).
914* We now encourage static allocation of tub.port, and pre-configuration of
915  the node's externally-reachable IP address or hostname (by setting
916  tub.location). Automatic IP-address detection is deprecated. Automatic port
917  allocation is discouraged. Both are managed by the new arguments to "tahoe
918  create-node".
919* "tahoe start" now creates the Tub, and all primary software components,
920  before the child process daemonizes. Many configuration errors which would
921  previously have been reported in a logfile (after node startup), will now
922  be signalled immediately, via stderr. In these cases, the "tahoe start"
923  process will exit with a non-zero return code. (#2491)
924* Unrecognized tahoe.cfg options are rejected at startup, not ignored (#2809)
925* ``tub.port`` can take multple (comma-separated) endpoints, to listen on
926  multiple ports at the same time, useful for dual IPv4+IPv6 servers. (#867)
927* An empty ``tub.port`` means don't listen at all, which is appropriate for
928  client-only nodes (#2816)
929* A new setting, ``reveal-ip-address = false``, acts as a safety belt,
930  causing an error to be thrown if any other setting might reveal the node's
931  IP address (i.e. it requires Tor or I2P to be used, rather than direct TCP
932  connections). This is set automatically by ``tahoe create-client
933  --hide-ip``. (#1010)
934
935Server-like nodes (Storage Servers and Introducers), created with ``tahoe
936create-node`` and ``tahoe create-introducer``, now accept new arguments to
937control how they listen for connections, and how they advertise themselves to
938other nodes. You can use ``--listen=tcp`` and ``--hostname=`` to choose a
939port automatically, or ``--listen=tor`` / ``--listen=i2p`` to use Tor/I2P
940hidden services instead. You can also use ``--port=`` and ``--location=`` to
941explicitly control the listener and the advertised location. (#2773, #2490)
942
943The "stats-gatherer", used by enterprise deployments to collect runtime
944statistics from a fleet of Tahoe storage servers, must now be assigned a
945hostname, or location+port pair, at creation time. It will no longer attempt
946to guess its location (with /sbin/ifconfig). The "tahoe
947create-stats-gatherer" command requires either "--hostname=", or both
948"--location=" and "--port". (#2773)
949
950To keep your old stats-gatherers working, with their original FURL, you must
951determine a suitable --location and --port, and write their values into
952NODEDIR/location and NODEDIR/port, respectively. Or you could simply rebuild
953it by re-running "tahoe create-stats-gatherer" with the new arguments.
954
955The stats gatherer now updates a JSON file named "stats.json", instead of a
956Pickle named "stats.pickle". The munin plugins in
957misc/operations_helpers/munin/ have been updated to match, and must be
958re-installed and re-configured if you use munin.
959
960Removed Features
961----------------
962
963The "key-generator" node type has been removed. This was a standalone process
964that maintained a queue of RSA keys, and clients could offload their
965key-generation work by adding "key_generator.furl=" in their tahoe.cfg files,
966to create mutable files and directories faster. This seemed important back in
9672006, but these days computers are faster and RSA key generation only takes
968about 90ms. This removes the "tahoe create-key-generator" command. Any
969"key_generator.furl" settings in tahoe.cfg will log a warning and are
970otherwise ignored. Attempts to "tahoe start" a previously-generated
971key-generator node will result in an error. (#2783)
972
973Tahoe's HTTP Web-API (aka "the WAPI") had an endpoint named "/file/". This
974has been deprecated, and applications should use "/named/" instead. (#1903)
975
976The little-used "manhole" debugging feature has been removed. This allowed
977you to SSH or Telnet "into" a Tahoe node, providing an interactive
978Read-Eval-Print-Loop (REPL) that executed inside the context of the running
979process. (#2367)
980
981The "tahoe debug trial" and "tahoe debug repl" CLI commands were removed, as
982"tox" is now the preferred way to run tests. (#2735)
983
984One of the "recent uploads and downloads" status pages was using a
985Google-hosted API to draw a timing chart of the "mapupdate" operation. This
986has been removed, both for privacy (to avoid revealing the serverids to
987Google) and because the API was deprecated several years ago. (#1942)
988
989The "_appname.py" feature was removed. Early in Tahoe's history (at
990AllMyData), this file allowed the "tahoe" executable to be given a different
991name depending upon which Darcs patches were included in the particular
992source tree (one for production, another for development, etc). We haven't
993needed this for a long time, so it was removed. (#2754)
994
995Other Changes
996-------------
997
998Documentation is now hosted at http://tahoe-lafs.readthedocs.io/ (not .org).
999
1000Tahoe's testing-only dependencies can now be installed by asking for the
1001[test] extra, so if you want to set up a virtualenv for testing, use "pip
1002install -e .[test]" instead just of "pip install -e ." . This includes "tox",
1003"coverage", "pyflakes", "mock", and all the Tor/I2P extras. Most developer
1004tooling (code-checks, documentation builds, deprecation warnings, etc) have
1005been moved from a Makefile into tox environments. (#2776)
1006
1007The "Welcome" (web) page now shows more detail about the introducer and
1008storage-server connections, including which connection handler is being used
1009(tcp/tor/i2p) and why specific connection hints failed to connect. (#2818,
1010#2819)
1011
1012The little-used "control port" now uses a separate (ephemeral) Tub. This
1013means the FURL changes each time the node is restarted, and it only listens
1014on the loopback (127.0.0.1) interface, on a random port. As the control port
1015is only used by some automated tests (check_memory, check_speed), this
1016shouldn't affect anyone. (#2794)
1017
1018The slightly-more-used "log port" now also uses a separate (ephemeral) Tub,
1019with the same consequences. The lack of a stable (and externally-reachable)
1020logport.furl means it is no longer possible to use ``flogtool tail FURL``
1021against a distant Tahoe server, however ``flogtool tail
1022.../nodedir/private/logport.furl`` still works just fine (and is the more
1023common use case anyways). We might bring back the ability to configure the
1024port and location of the logport in the future, if there is sufficient
1025demand, but for now it seems better to avoid the complexity.
1026
1027The default tahoe.cfg setting of ``web.static = public_html``, when
1028``NODEDIR/public_html/`` does not exist, no longer causes web browsers to
1029display a traceback which reveals somewhat-private information like the value
1030of NODEDIR, and the Python/OS versions in use. Instead it just shows a plain
1031404 error. (#1720)
1032
1033
1034Release 1.11.0 (30-Mar-2016)
1035''''''''''''''''''''''''''''
1036
1037New Build Process
1038-----------------
1039
1040``pip install`` (in a virtualenv) is now the recommended way to install
1041Tahoe-LAFS. The old "bin/tahoe" script (created inside the source tree,
1042rather than in a virtualenv) has been removed, as has the ancient
1043"zetuptoolz" fork of setuptools.
1044
1045Tahoe was started in 2006, and predates pip and virtualenv. From the
1046very beginning it used a home-made build process that attempted to make
1047``setup.py build`` behave somewhat like a modern ``pip
1048install --editable .``. It included a local copy of ``setuptools`` (to
1049avoid requiring it to be pre-installed), which was then forked as
1050``zetuptoolz`` to fix bugs during the bad old days of setuptools
1051non-maintenance. The pseudo-virtualenv used a script named
1052``bin/tahoe``, created during ``setup.py build``, to set up the $PATH
1053and $PYTHONPATH as necessary.
1054
1055Starting with this release, all the custom build process has been
1056removed, and Tahoe should be installable with standard modern tools. You
1057will need ``virtualenv`` installed (which provides ``pip`` and
1058setuptools). Many Python installers include ``virtualenv`` already, and
1059Debian-like systems can use ``apt-get install python-virtualenv``. If
1060the command is not available on your system, follow the installation
1061instructions at https://virtualenv.pypa.io/en/latest/ .
1062
1063Then, to install the latest version, create a virtualenv and use
1064``pip``::
1065
1066    virtualenv venv
1067    . venv/bin/activate
1068    (venv) pip install tahoe-lafs
1069    (venv) tahoe --version
1070
1071To run Tahoe from a source checkout (so you can hack on Tahoe), use
1072``pip install --editable .`` from the git tree::
1073
1074    git clone https://github.com/tahoe-lafs/tahoe-lafs.git
1075    cd tahoe-lafs
1076    virtualenv venv
1077    . venv/bin/activate
1078    (venv) pip install --editable .
1079    (venv) tahoe --version
1080
1081The ``pip install`` will download and install all necessary Python
1082dependencies. Some dependencies require a C compiler and system
1083libraries to build: on Debian/Ubuntu-like systems, use ``apt-get install
1084build-essential python-dev libffi-dev libssl-dev``. On Windows and OS-X
1085platforms, we provide pre-compiled binary wheels at
1086``https://tahoe-lafs.org/deps/``, removing the need for a compiler.
1087
1088(#1582, #2445, also helped to close: #142, #709, #717, #799, #1220,
1089#1260, #1270, #1403, #1450, #1451, #1504, #1896, #2044, #2221, #2021,
1090#2028, #2066, #2077, #2247, #2255, #2286, #2306, #2473, #2475, #2530,
1091#657, #2446, #2439, #2317, #1753, #1009, #1168, #1238, #1258, #1334,
1092#1346, #1464, #2356, #2570)
1093
1094New PyPI Distribution Name
1095--------------------------
1096
1097Tahoe-LAFS is now known on PyPI as ``tahoe-lafs``. It was formerly known
1098as ``allmydata-tahoe``. This affects ``pip install`` commands. (#2011)
1099
1100Because of this change, if you use a git checkout, you may need to run
1101``make distclean`` (to delete the machine-generated
1102``src/allmydata/_appname.py`` file). You may also need to remove
1103``allmydata-tahoe`` from any virtualenvs you've created, before
1104installing ``tahoe-lafs`` into them. If all else fails, make a new git
1105checkout, and use a new virtualenv.
1106
1107Note that the importable *package* name is still ``allmydata``, but this
1108only affects developers, not end-users. This name scheduled to be
1109changed in a future release. (#1950)
1110
1111
1112Compatibility and Dependency Updates
1113------------------------------------
1114
1115Tahoe now requires Python 2.7 on all platforms. (#2445)
1116
1117Tahoe now requires Foolscap 0.10.1, which fixes incompatibilities with
1118recent Twisted releases. (#2510, #2722, #2567)
1119
1120Tahoe requires Twisted 15.1.0 or later, so it can request the
1121``Twisted[tls]`` "extra" (this asks Twisted to ask for everything it
1122needs to provide proper TLS support). (#2760)
1123
1124Tests should now work with both Nevow 0.11 and 0.12 . (#2663)
1125
1126Binary wheels for Windows and OS-X (for all dependencies) have been
1127built and are hosted at https://tahoe-lafs.org/deps . Use ``pip
1128install --find-links=URL tahoe-lafs`` to take advantage of them. (#2001)
1129
1130We've removed the SUMO and tahoe-deps tarballs. Please see
1131docs/desert-island.rst for instructions to build tahoe from offline
1132systems. (#1009, #2530, #2446, #2439)
1133
1134Configuration Changes
1135---------------------
1136
1137A new "peers.preferred" item was added to the ``[client]`` section. This
1138identifies servers that will be promoted to the front of the
1139peer-selection list when uploading or downloading files. Servers are
1140identified by their Node ID (visible on the welcome page). This may be
1141useful to ensure that one full set of shares are placed on nearby
1142servers, making later downloads fast (and avoid using scarce remote
1143bandwidth). The remaining shares can go to distant backup servers. (git
1144commit 96eaca6)
1145
1146Aliases can now be unicode. (git commit 46719a8b)
1147
1148The introducer's "set_encoding_parameters" feature was removed. Once
1149upon a time, the Introducer could recommend encoding parameters
1150(shares.needed and shares.total) to all clients, the idea being that the
1151Introducer had a slightly better idea about the expected size of the
1152storage server pool than clients might. Client-side support for this was
1153removed long ago, but the Introducer itself kept delivering
1154recommendations until this release. (git commit 56a9f5ad)
1155
1156Other Fixes
1157-----------
1158
1159The OS-X .pkg installer has been improved slightly, to clean up after
1160previous installations better. (#2493)
1161
1162All WUI (Web UI) timestamps should now be a consistent format, using the
1163gateway machine's local time zone. (#1077)
1164
1165The web "welcome page" has been improved: it shows how long a server has
1166been connected (in minutes/hours/days, instead of the date+time when the
1167connection was most recently established). The "announced" column has
1168been replaced with "Last RX" column that shows when we last heard
1169anything from the server. The mostly-useless "storage" column has been
1170removed. (#1973)
1171
1172In the ``tahoe ls`` command, the ``-u`` shortcut for ``--uri`` has been
1173removed, leaving the shortcut free for the global ``--node-url`` option.
1174(#1949, #2137)
1175
1176Some internal logging was disabled, to avoid a temporary bug that caused
1177excessive (perhaps infinite) log messages to be created. (#2567)
1178
1179Other non-user-visible tickets were fixed. (#2499, #2511, #2556, #2663,
1180#2723, #2543)
1181
1182
1183Release 1.10.2 (2015-07-30)
1184'''''''''''''''''''''''''''
1185
1186Packaging Changes
1187-----------------
1188
1189This release no longer requires the ``mock`` library (which was previously
1190used in the unit test suite). Shortly after the Tahoe-LAFS 1.10.1 release, a
1191new version of ``mock`` was released (1.1.0) that proved to be incompatible
1192with Tahoe's fork of setuptools, preventing Tahoe-1.10.1 from building at
1193all. `#2465`_
1194
1195The ``tahoe --version`` output is now less likely to include scary diagnostic
1196warnings that look deceptively like stack traces. `#2436`_
1197
1198The pyasn1 requirement was increased to >= 0.1.8.
1199
1200.. _`#2465`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2465
1201.. _`#2436`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2436
1202
1203Other Fixes
1204-----------
1205
1206A WebAPI ``GET`` would sometimes hang when using the HTTP Range header to
1207read just part of the file. `#2459`_
1208
1209Using ``tahoe cp`` to copy two different files of the same name into the same
1210target directory now raises an error, rather than silently overwriting one of
1211them. `#2447`_
1212
1213All tickets closed in this release: 2328 2436 2446 2447 2459 2460 2461 2462
12142465 2470.
1215
1216.. _`#2459`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2459
1217.. _`#2447`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2447
1218
1219
1220Release 1.10.1 (2015-06-15)
1221'''''''''''''''''''''''''''
1222
1223User Interface / Configuration Changes
1224--------------------------------------
1225
1226The "``tahoe cp``" CLI command's ``--recursive`` option is now more predictable,
1227but behaves slightly differently than before. See below for details. Tickets
1228`#712`_, `#2329`_.
1229
1230The SFTP server can now use public-key authentication (instead of only
1231password-based auth). Public keys are configured through an "account file",
1232just like passwords. See docs/frontends/FTP-and-SFTP for examples of the
1233format. `#1411`_
1234
1235The Tahoe node can now be configured to disable automatic IP-address
1236detection. Using "AUTO" in tahoe.cfg [node]tub.location= (which is now the
1237default) triggers autodetection. Omit "AUTO" to disable autodetection. "AUTO"
1238can be combined with static addresses to e.g. use both a stable
1239UPnP-configured tunneled address and a DHCP-assigned dynamic (local subnet
1240only) address. See `configuration.rst`_ for details. `#754`_
1241
1242The web-based user interface ("WUI") Directory and Welcome pages have been
1243redesigned, with improved CSS for narrow windows and more-accessible icons
1244(using distinctive shapes instead of just colors). `#1931`_ `#1961`_ `#1966`_
1245`#1972`_ `#1901`_
1246
1247.. _`#712`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/712
1248.. _`#754`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/754
1249.. _`#1411`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1411
1250.. _`#1901`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1901
1251.. _`#1931`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1931
1252.. _`#1961`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1961
1253.. _`#1966`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1966
1254.. _`#1972`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1972
1255.. _`#2329`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2329
1256.. _`configuration.rst`: docs/configuration.rst
1257
1258"tahoe cp" changes
1259------------------
1260
1261The many ``cp``-like tools in the Unix world (POSIX ``/bin/cp``, the ``scp``
1262provided by SSH, ``rsync``) all behave slightly differently in unusual
1263circumstances, especially when copying whole directories into a target that
1264may or may not already exist. The most common difference is whether the user
1265is referring to the source directory as a whole, or to its contents. For
1266example, should "``cp -r foodir bardir``" create a new directory named
1267"``bardir/foodir``"? Or should it behave more like "``cp -r foodir/* bardir``"?
1268Some tools use the presence of a trailing slash to indicate which behavior
1269you want. Others ignore trailing slashes.
1270
1271"``tahoe cp``" is no exception to having exceptional cases. This release fixes
1272some bad behavior and attempts to establish a consistent rationale for its
1273behavior. The new rule is:
1274
1275- If the thing being copied is a directory, and it has a name (e.g. it's not
1276  a raw Tahoe-LAFS directorycap), then you are referring to the directory
1277  itself.
1278- If the thing being copied is an unnamed directory (e.g. raw dircap or
1279  alias), then you are referring to the contents.
1280- Trailing slashes do not affect the behavior of the copy (although putting
1281  a trailing slash on a file-like target is an error).
1282- The "``-r``" (``--recursive``) flag does not affect the behavior of the
1283  copy (although omitting ``-r`` when the source is a directory is an error).
1284- If the target refers to something that does not yet exist:
1285  - and if the source is a single file, then create a new file;
1286  - otherwise, create a directory.
1287
1288There are two main cases where the behavior of Tahoe-LAFS v1.10.1 differs
1289from that of the previous v1.10.0 release:
1290
1291- "``cp DIRCAP/file.txt ./local/missing``" , where "``./local``" is a
1292  directory but "``./local/missing``" does not exist. The implication is
1293  that you want Tahoe to create a new file named "``./local/missing``" and
1294  fill it with the contents of the Tahoe-side ``DIRCAP/file.txt``. In
1295  v1.10.0, a plain "``cp``" would do just this, but "``cp -r``" would do
1296  "``mkdir ./local/missing``" and then create a file named
1297  "``./local/missing/file.txt``". In v1.10.1, both "``cp``" and "``cp -r``"
1298  create a file named "``./local/missing``".
1299- "``cp -r PARENTCAP/dir ./local/missing``", where ``PARENTCAP/dir/``
1300  contains "``file.txt``", and again "``./local``" is a directory but
1301  "``./local/missing``" does not exist. In both v1.10.0 and v1.10.1, this
1302  first does "``mkdir ./local/missing``". In v1.10.0, it would then copy
1303  the contents of the source directory into the new directory, resulting
1304  in "``./local/missing/file.txt``". In v1.10.1, following the new rule
1305  of "a named directory source refers to the directory itself", the tool
1306  creates "``./local/missing/dir/file.txt``".
1307
1308Compatibility and Dependency Updates
1309------------------------------------
1310
1311Windows now requires Python 2.7. Unix/OS-X platforms can still use either
1312Python 2.6 or 2.7, however this is probably the last release that will
1313support 2.6 (it is no longer receiving security updates, and most OS
1314distributions have switched to 2.7). Tahoe-LAFS now has the following
1315dependencies:
1316
1317- Twisted >= 13.0.0
1318- Nevow >= 0.11.1
1319- foolscap >= 0.8.0
1320- service-identity
1321- characteristic >= 14.0.0
1322- pyasn1 >= 0.1.4
1323- pyasn1-modules >= 0.0.5
1324
1325On Windows, if pywin32 is not installed then the dependencies on Twisted
1326and Nevow become:
1327
1328- Twisted >= 11.1.0, <= 12.1.0
1329- Nevow >= 0.9.33, <= 0.10
1330
1331On all platforms, if pyOpenSSL >= 0.14 is installed, then it will be used,
1332but if not then only pyOpenSSL >= 0.13, <= 0.13.1 will be built when directly
1333invoking `setup.py build` or `setup.py install`.
1334
1335We strongly advise OS packagers to take the option of making a tahoe-lafs
1336package depend on pyOpenSSL >= 0.14. In order for that to work, the following
1337additional Python dependencies are needed:
1338
1339- cryptography
1340- cffi >= 0.8
1341- six >= 1.4.1
1342- enum34
1343- pycparser
1344
1345as well as libffi (for Debian/Ubuntu, the name of the needed OS package is
1346`libffi6`).
1347
1348Tahoe-LAFS is now compatible with Setuptools version 8 and Pip version 6 or
1349later, which should fix execution on Ubuntu 15.04 (it now tolerates PEP440
1350semantics in dependency specifications). `#2354`_ `#2242`_
1351
1352Tahoe-LAFS now depends upon foolscap-0.8.0, which creates better private keys
1353and certificates than previous versions. To benefit from the improvements
1354(2048-bit RSA keys and SHA256-based certificates), you must re-generate your
1355Tahoe nodes (which changes their TubIDs and FURLs). `#2400`_
1356
1357.. _`#2242`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2242
1358.. _`#2354`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2354
1359.. _`#2400`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2400
1360
1361Packaging
1362---------
1363
1364A preliminary OS-X package, named "``tahoe-lafs-VERSION-osx.pkg``", is now
1365being generated. It is a standard double-clickable installer, which creates
1366``/Applications/tahoe.app`` that embeds a complete runtime tree. However
1367launching the ``.app`` only brings up a notice on how to run tahoe from the
1368command line. A future release may turn this into a fully-fledged application
1369launcher. `#182`_ `#2393`_ `#2323`_
1370
1371Preliminary Docker support was added. Tahoe container images may be available
1372on DockerHub. `PR#165`_ `#2419`_ `#2421`_
1373
1374Old and obsolete Debian packaging tools have been removed. `#2282`_
1375
1376.. _`#182`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/182
1377.. _`#2282`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2282
1378.. _`#2323`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2323
1379.. _`#2393`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2393
1380.. _`#2419`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2419
1381.. _`#2421`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2421
1382.. _`PR#165`: https://github.com/tahoe-lafs/tahoe-lafs/pull/165
1383
1384Minor Changes
1385-------------
1386
1387- Welcome page: add per-server "(space) Available" column. `#648`_
1388- check/deep-check learned to accept multiple location arguments. `#740`_
1389- Checker reports: remove needs-rebalancing, add count-happiness. `#1784`_ `#2105`_
1390- CLI ``--help``: cite (but don't list) global options on each command. `#2233`_
1391- Fix ftp "``ls``" to work with Twisted 15.0.0. `#2394`_
1392
1393.. _`#648`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/648
1394.. _`#740`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/740
1395.. _`#1784`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1784
1396.. _`#2105`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2105
1397.. _`#2233`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2233
1398.. _`#2394`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2394
1399
1400Roughly 75 tickets were closed in this release: 623 648 712 740 754 898 1146
14011159 1336 1381 1411 1634 1674 1698 1707 1717 1737 1784 1800 1807 1842 1847
14021901 1918 1953 1960 1961 1966 1969 1972 1974 1988 1992 2005 2008 2023 2027
14032028 2034 2048 2067 2086 2105 2121 2128 2165 2193 2208 2209 2233 2235 2242
14042245 2248 2249 2249 2280 2281 2282 2290 2305 2312 2323 2340 2354 2380 2393
14052394 2398 2400 2415 2416 2417 2433. Another dozen were referenced but not
1406closed: 182 666 982 1064 1258 1531 1536 1742 1834 1931 1935 2286. Roughly 40
1407GitHub pull-requests were closed: 32 48 50 56 57 61 62 62 63 64 69 73 81 82
140884 85 87 91 94 95 96 103 107 109 112 114 120 122 125 126 133 135 136 137 142
1409146 149 152 165.
1410
1411For more information about any ticket, visit e.g.
1412https://tahoe-lafs.org/trac/tahoe-lafs/ticket/754
1413
1414
1415Release 1.10.0 (2013-05-01)
1416'''''''''''''''''''''''''''
1417
1418New Features
1419------------
1420
1421- The Welcome page has been redesigned. This is a preview of the design style
1422  that is likely to be used in other parts of the WUI in future Tahoe-LAFS
1423  versions. (`#1713`_, `#1457`_, `#1735`_)
1424- A new extensible Introducer protocol has been added, as the basis for
1425  future improvements such as accounting. Compatibility with older nodes is
1426  not affected. When server, introducer, and client are all upgraded, the
1427  welcome page will show node IDs that start with "v0-" instead of the old
1428  tubid. See `<docs/nodekeys.rst>`__ for details. (`#466`_)
1429- The web-API has a new ``relink`` operation that supports directly moving
1430  files between directories. (`#1579`_)
1431
1432Security Improvements
1433---------------------
1434
1435- The ``introducer.furl`` for new Introducers is now unguessable. In previous
1436  releases, this FURL used a predictable swissnum, allowing a network
1437  eavesdropper who observes any node connecting to the Introducer to access
1438  the Introducer themselves, and thus use servers or offer storage service to
1439  clients (i.e. "join the grid"). In the new code, the only way to join a
1440  grid is to be told the ``introducer.furl`` by someone who already knew it.
1441  Note that pre-existing introducers are not changed. To force an introducer
1442  to generate a new FURL, delete the existing ``introducer.furl`` file and
1443  restart it. After doing this, the ``[client]introducer.furl`` setting of
1444  every client and server that should connect to that introducer must be
1445  updated. Note that other users of a shared machine may be able to read
1446  ``introducer.furl`` from your ``tahoe.cfg`` file unless you configure the
1447  file permissions to prevent them. (`#1802`_)
1448- Both ``introducer.furl`` and ``helper.furl`` are now censored from the
1449  Welcome page, to prevent users of your gateway from learning enough to
1450  create gateway nodes of their own.  For existing guessable introducer
1451  FURLs, the ``introducer`` swissnum is still displayed to show that a
1452  guessable FURL is in use. (`#860`_)
1453
1454Command-line Syntax Changes
1455---------------------------
1456
1457- Global options to ``tahoe``, such as ``-d``/``--node-directory``, must now
1458  come before rather than after the command name (for example,
1459  ``tahoe -d BASEDIR cp -r foo: bar:`` ). (`#166`_)
1460
1461Notable Bugfixes
1462----------------
1463
1464- In earlier versions, if a connection problem caused a download failure for
1465  an immutable file, subsequent attempts to download the same file could also
1466  fail. This is now fixed. (`#1679`_)
1467- Filenames in WUI directory pages are now displayed correctly when they
1468  contain characters that require HTML escaping. (`#1143`_)
1469- Non-ASCII node nicknames no longer cause WUI errors. (`#1298`_)
1470- Checking a LIT file using ``tahoe check`` no longer results in an
1471  exception. (`#1758`_)
1472- The SFTP frontend now works with recent versions of Twisted, rather than
1473  giving errors or warnings about use of ``IFinishableConsumer``. (`#1926`_,
1474  `#1564`_, `#1525`_)
1475- ``tahoe cp --verbose`` now counts the files being processed correctly.
1476  (`#1805`_, `#1783`_)
1477- Exceptions no longer trigger an unhelpful crash reporter on Ubuntu 12.04
1478  ("Precise") or later. (`#1746`_)
1479- The error message displayed when a CLI tool cannot connect to a gateway has
1480  been improved. (`#974`_)
1481- Other minor fixes: `#1781`_, `#1812`_, `#1915`_, `#1484`_, `#1525`_
1482
1483Compatibility and Dependencies
1484------------------------------
1485
1486- Python >= 2.6, except Python 3 (`#1658`_)
1487- Twisted >= 11.0.0 (`#1771`_)
1488- mock >= 0.8 (for unit tests)
1489- pycryptopp >= 0.6.0 (for Ed25519 signatures)
1490- zope.interface >= 3.6.0 (except 3.6.3 or 3.6.4)
1491
1492Other Changes
1493-------------
1494
1495- The ``flogtool`` utility, used to read detailed event logs, can now be
1496  accessed as ``tahoe debug flogtool`` even when Foolscap is not installed
1497  system-wide. (`#1693`_)
1498- The provisioning/reliability pages were removed from the main client's web
1499  interface, and moved into a standalone web-based tool. Use the ``run.py``
1500  script in ``misc/operations_helpers/provisioning/`` to access them.
1501- Web clients can now cache (ETag) immutable directory pages. (`#443`_)
1502- `<docs/convergence_secret.rst>`__ was added to document the adminstration
1503  of convergence secrets. (`#1761`_)
1504
1505Precautions when Upgrading
1506--------------------------
1507
1508- When upgrading a grid from a recent revision of trunk, follow the
1509  precautions from this `message to the tahoe-dev mailing list`_, to ensure
1510  that announcements to the Introducer are recognized after the upgrade.
1511  This is not necessary when upgrading from a previous release like 1.9.2.
1512
1513.. _`#166`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/166
1514.. _`#443`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/443
1515.. _`#466`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/466
1516.. _`#860`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/860
1517.. _`#974`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/974
1518.. _`#1143`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1143
1519.. _`#1298`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1298
1520.. _`#1457`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1457
1521.. _`#1484`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1484
1522.. _`#1525`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1525
1523.. _`#1564`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1564
1524.. _`#1579`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1579
1525.. _`#1658`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1658
1526.. _`#1679`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1679
1527.. _`#1693`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1693
1528.. _`#1713`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1713
1529.. _`#1735`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1735
1530.. _`#1746`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1746
1531.. _`#1758`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1758
1532.. _`#1761`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1761
1533.. _`#1771`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1771
1534.. _`#1781`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1781
1535.. _`#1783`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1783
1536.. _`#1802`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1802
1537.. _`#1805`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1805
1538.. _`#1812`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1812
1539.. _`#1915`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1915
1540.. _`#1926`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1926
1541.. _`message to the tahoe-dev mailing list`:
1542             https://lists.tahoe-lafs.org/pipermail/tahoe-dev/2013-March/008079.html
1543
1544
1545Release 1.9.2 (2012-07-03)
1546''''''''''''''''''''''''''
1547
1548Notable Bugfixes
1549----------------
1550
1551- Several regressions in support for reading (`#1636`_), writing/modifying
1552  (`#1670`_, `#1749`_), verifying (`#1628`_) and repairing (`#1655`_, `#1669`_,
1553  `#1676`_, `#1689`_) mutable files have been fixed.
1554- FTP can now list directories containing mutable files, although it
1555  still does not support reading or writing mutable files. (`#680`_)
1556- The FTP frontend would previously show Jan 1 1970 for all timestamps;
1557  now it shows the correct modification time of the directory entry.
1558  (`#1688`_)
1559- If a node is configured to report incidents to a log gatherer, but the
1560  gatherer is offline when some incidents occur, it would previously not
1561  "catch up" with those incidents as intended. (`#1725`_)
1562- OpenBSD 5 is now supported. (`#1584`_)
1563- The ``count-good-share-hosts`` field of file check results is now
1564  computed correctly. (`#1115`_)
1565
1566Configuration/Behavior Changes
1567------------------------------
1568
1569- The capability of the upload directory for the drop-upload frontend
1570  is now specified in the file ``private/drop_upload_dircap`` under
1571  the gateway's node directory, rather than in its ``tahoe.cfg``.
1572  (`#1593`_)
1573
1574Packaging Changes
1575-----------------
1576
1577- Tahoe-LAFS can be built correctly from a git repository as well as
1578  from darcs.
1579
1580Compatibility and Dependencies
1581------------------------------
1582
1583- foolscap >= 0.6.3 is required, in order to make Tahoe-LAFS compatible
1584  with Twisted >= 11.1.0. (`#1788`_)
1585- Versions 2.0.1 and 2.4 of PyCrypto are excluded. (`#1631`_, `#1574`_)
1586
1587.. _`#680`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/680
1588.. _`#1115`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1115
1589.. _`#1574`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1574
1590.. _`#1584`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1584
1591.. _`#1593`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1593
1592.. _`#1628`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1628
1593.. _`#1631`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1631
1594.. _`#1636`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1636
1595.. _`#1655`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1655
1596.. _`#1669`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1669
1597.. _`#1670`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1670
1598.. _`#1676`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1676
1599.. _`#1688`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1688
1600.. _`#1689`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1689
1601.. _`#1725`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1725
1602.. _`#1749`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1749
1603.. _`#1788`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1788
1604
1605
1606Release 1.9.1 (2012-01-12)
1607''''''''''''''''''''''''''
1608
1609Security-related Bugfix
1610-----------------------
1611
1612- Fix flaw that would allow servers to cause undetected corruption when
1613  retrieving the contents of mutable files (both SDMF and MDMF). (`#1654`_)
1614
1615.. _`#1654`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1654
1616
1617
1618Release 1.9.0 (2011-10-30)
1619''''''''''''''''''''''''''
1620
1621New Features
1622------------
1623
1624- The most significant new feature in this release is MDMF: "Medium-size
1625  Distributed Mutable Files". Unlike standard SDMF files, these provide
1626  efficient partial-access (reading and modifying small portions of the file
1627  instead of the whole thing). MDMF is opt-in (it is not yet the default
1628  format for mutable files), both to ensure compatibility with previous
1629  versions, and because the algorithm does not yet meet memory-usage goals.
1630  Enable it with ``--format=MDMF`` in the CLI (``tahoe put`` and ``tahoe
1631  mkdir``), or the "format" radioboxes in the web interface. See
1632  `<docs/specifications/mutable.rst>`__ for more details (`#393`_, `#1507`_)
1633- A "blacklist" feature allows blocking access to specific files through
1634  a particular gateway. See the "Access Blacklist" section of
1635  `<docs/configuration.rst>`__ for more details. (`#1425`_)
1636- A "drop-upload" feature has been added, which allows you to upload
1637  files to a Tahoe-LAFS directory just by writing them to a local
1638  directory. This feature is experimental and should not be relied on
1639  to store the only copy of valuable data. It is currently available
1640  only on Linux. See `<docs/frontends/drop-upload.rst>`__ for documentation.
1641  (`#1429`_)
1642- The timeline of immutable downloads can be viewed using a zoomable and
1643  pannable JavaScript-based visualization. This is accessed using the
1644  'timeline' link on the File Download Status page for the download, which
1645  can be reached from the Recent Uploads and Downloads page.
1646
1647Configuration/Behavior Changes
1648------------------------------
1649
1650- Prior to Tahoe-LAFS v1.3, the configuration of some node options could
1651  be specified using individual config files rather than via ``tahoe.cfg``.
1652  These files now cause an error if present. (`#1385`_)
1653- Storage servers now calculate their remaining space based on the filesystem
1654  containing the ``storage/shares/`` directory. Previously they looked at the
1655  filesystem containing the ``storage/`` directory. This allows
1656  ``storage/shares/``, rather than ``storage/``, to be a mount point or a
1657  symlink pointing to another filesystem. (`#1384`_)
1658- ``tahoe cp xyz MUTABLE`` will modify the existing mutable file instead of
1659  creating a new one. (`#1304`_)
1660- The button for unlinking a file from its directory on a WUI directory
1661  listing is now labelled "unlink" rather than "del". (`#1104`_)
1662
1663Notable Bugfixes
1664----------------
1665
1666- The security bugfix for the vulnerability allowing deletion of shares,
1667  detailed in the news for v1.8.3 below, is also included in this
1668  release. (`#1528`_)
1669- Some cases of immutable upload, for example using the ``tahoe put`` and
1670  ``tahoe cp`` commands or SFTP, did not appear in the history of Recent
1671  Uploads and Downloads. (`#1079`_)
1672- The memory footprint of the verifier has been reduced by serializing
1673  block fetches. (`#1395`_)
1674- Large immutable downloads are now a little faster than in v1.8.3 (about
1675  5% on a fast network). (`#1268`_)
1676
1677Packaging Changes
1678-----------------
1679
1680- The files related to Debian packaging have been removed from the Tahoe
1681  source tree, since they are now maintained as part of the official
1682  Debian packages. (`#1454`_)
1683- The unmaintained FUSE plugins were removed from the source tree. See
1684  ``docs/frontends/FTP-and-SFTP.rst`` for how to mount a Tahoe filesystem on
1685  Unix via sshfs. (`#1409`_)
1686- The Tahoe licenses now give explicit permission to combine Tahoe-LAFS
1687  with code distributed under the following additional open-source licenses
1688  (any version of each):
1689
1690  * Academic Free License
1691  * Apple Public Source License
1692  * BitTorrent Open Source License
1693  * Lucent Public License
1694  * Jabber Open Source License
1695  * Common Development and Distribution License
1696  * Microsoft Public License
1697  * Microsoft Reciprocal License
1698  * Sun Industry Standards Source License
1699  * Open Software License
1700
1701Compatibility and Dependencies
1702------------------------------
1703
1704- To resolve an incompatibility between Nevow and zope.interface (versions
1705  3.6.3 and 3.6.4), Tahoe-LAFS now requires an earlier or later
1706  version of zope.interface. (`#1435`_)
1707- The Twisted dependency has been raised to version 10.1 to ensure we no
1708  longer require pywin32 on Windows, the new drop-upload feature has the
1709  required support from Twisted on Linux, and that it is never necessary to
1710  patch Twisted in order to use the FTP frontend. (`#1274`_, `#1429`_,
1711  `#1438`_)
1712- An explicit dependency on pyOpenSSL has been added, replacing the indirect
1713  dependency via the "secure_connections" option of foolscap. (`#1383`_)
1714
1715Minor Changes
1716-------------
1717
1718- A ``man`` page has been added (`#1420`_). All other docs are in ReST
1719  format.
1720- The ``tahoe_files`` munin plugin reported an incorrect count of the number
1721  of share files. (`#1391`_)
1722- Minor documentation updates: #627, #1104, #1225, #1297, #1342, #1404
1723- Other minor changes: #636, #1355, #1363, #1366, #1388, #1392, #1412, #1344,
1724  #1347, #1359, #1389, #1441, #1442, #1446, #1474, #1503
1725
1726.. _`#393`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/393
1727.. _`#1079`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1079
1728.. _`#1104`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1104
1729.. _`#1268`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1268
1730.. _`#1274`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1274
1731.. _`#1304`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1304
1732.. _`#1383`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1383
1733.. _`#1384`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1384
1734.. _`#1385`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1385
1735.. _`#1391`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1391
1736.. _`#1395`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1395
1737.. _`#1409`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1409
1738.. _`#1420`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1420
1739.. _`#1425`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1425
1740.. _`#1429`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1429
1741.. _`#1435`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1435
1742.. _`#1438`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1438
1743.. _`#1454`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1454
1744.. _`#1507`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1507
1745
1746
1747Release 1.8.3 (2011-09-13)
1748''''''''''''''''''''''''''
1749
1750Security-related Bugfix
1751-----------------------
1752
1753- Fix flaw that would allow a person who knows a storage index of a file to
1754  delete shares of that file. (`#1528`_)
1755- Remove corner cases in mutable file bounds management which could expose
1756  extra lease info or old share data (from prior versions of the mutable
1757  file) if someone with write authority to that mutable file exercised these
1758  corner cases in a way that no actual Tahoe-LAFS client does. (Probably not
1759  exploitable.) (`#1528`_)
1760
1761.. _`#1528`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1528
1762
1763
1764Release 1.8.2 (2011-01-30)
1765''''''''''''''''''''''''''
1766
1767Compatibility and Dependencies
1768------------------------------
1769
1770- Tahoe is now compatible with Twisted-10.2 (released last month), as
1771  well as with earlier versions. The previous Tahoe-1.8.1 release
1772  failed to run against Twisted-10.2, raising an AttributeError on
1773  StreamServerEndpointService (`#1286`_)
1774- Tahoe now depends upon the "mock" testing library, and the foolscap
1775  dependency was raised to 0.6.1 . It no longer requires pywin32
1776  (which was used only on windows). Future developers should note that
1777  reactor.spawnProcess and derivatives may no longer be used inside
1778  Tahoe code.
1779
1780Other Changes
1781-------------
1782
1783- the default reserved_space value for new storage nodes is 1 GB
1784  (`#1208`_)
1785- documentation is now in reStructuredText (.rst) format
1786- "tahoe cp" should now handle non-ASCII filenames
1787- the unmaintained Mac/Windows GUI applications have been removed
1788  (`#1282`_)
1789- tahoe processes should appear in top and ps as "tahoe", not
1790  "python", on some unix platforms. (`#174`_)
1791- "tahoe debug trial" can be used to run the test suite (`#1296`_)
1792- the SFTP frontend now reports unknown sizes as "0" instead of "?",
1793  to improve compatibility with clients like FileZilla (`#1337`_)
1794- "tahoe --version" should now report correct values in situations
1795  where 1.8.1 might have been wrong (`#1287`_)
1796
1797.. _`#1208`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1208
1798.. _`#1282`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1282
1799.. _`#1286`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1286
1800.. _`#1287`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1287
1801.. _`#1296`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1296
1802.. _`#1337`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1337
1803
1804
1805Release 1.8.1 (2010-10-28)
1806''''''''''''''''''''''''''
1807
1808Bugfixes and Improvements
1809-------------------------
1810
1811- Allow the repairer to improve the health of a file by uploading some
1812  shares, even if it cannot achieve the configured happiness
1813  threshold. This fixes a regression introduced between v1.7.1 and
1814  v1.8.0. (`#1212`_)
1815- Fix a memory leak in the ResponseCache which is used during mutable
1816  file/directory operations. (`#1045`_)
1817- Fix a regression and add a performance improvement in the
1818  downloader.  This issue caused repair to fail in some special
1819  cases. (`#1223`_)
1820- Fix a bug that caused 'tahoe cp' to fail for a grid-to-grid copy
1821  involving a non-ASCII filename. (`#1224`_)
1822- Fix a rarely-encountered bug involving printing large strings to the
1823  console on Windows. (`#1232`_)
1824- Perform ~ expansion in the --exclude-from filename argument to
1825  'tahoe backup'. (`#1241`_)
1826- The CLI's 'tahoe mv' and 'tahoe ln' commands previously would try to
1827  use an HTTP proxy if the HTTP_PROXY environment variable was set.
1828  These now always connect directly to the WAPI, thus avoiding giving
1829  caps to the HTTP proxy (and also avoiding failures in the case that
1830  the proxy is failing or requires authentication). (`#1253`_)
1831- The CLI now correctly reports failure in the case that 'tahoe mv'
1832  fails to unlink the file from its old location. (`#1255`_)
1833- 'tahoe start' now gives a more positive indication that the node has
1834  started. (`#71`_)
1835- The arguments seen by 'ps' or other tools for node processes are now
1836  more useful (in particular, they include the path of the 'tahoe'
1837  script, rather than an obscure tool named 'twistd'). (`#174`_)
1838
1839Removed Features
1840----------------
1841
1842- The tahoe start/stop/restart and node creation commands no longer
1843  accept the -m or --multiple option, for consistency between
1844  platforms.  (`#1262`_)
1845
1846Packaging
1847---------
1848
1849- We now host binary packages so that users on certain operating
1850  systems can install without having a compiler.
1851  <https://tahoe-lafs.org/source/tahoe-lafs/deps/tahoe-lafs-dep-eggs/README.html>
1852- Use a newer version of a dependency if needed, even if an older
1853  version is installed. This would previously cause a VersionConflict
1854  error. (`#1190`_)
1855- Use a precompiled binary of a dependency if one with a sufficiently
1856  high version number is available, instead of attempting to compile
1857  the dependency from source, even if the source version has a higher
1858  version number. (`#1233`_)
1859
1860Documentation
1861-------------
1862
1863- All current documentation in .txt format has been converted to .rst
1864  format. (`#1225`_)
1865- Added docs/backdoors.rst declaring that we won't add backdoors to
1866  Tahoe-LAFS, or add anything to facilitate government access to data.
1867  (`#1216`_)
1868
1869.. _`#71`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/71
1870.. _`#174`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/174
1871.. _`#1212`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1212
1872.. _`#1045`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1045
1873.. _`#1190`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1190
1874.. _`#1216`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1216
1875.. _`#1223`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1223
1876.. _`#1224`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1224
1877.. _`#1225`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1225
1878.. _`#1232`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1232
1879.. _`#1233`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1233
1880.. _`#1241`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1241
1881.. _`#1253`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1253
1882.. _`#1255`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1255
1883.. _`#1262`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1262
1884
1885
1886Release 1.8.0 (2010-09-23)
1887''''''''''''''''''''''''''
1888
1889New Features
1890------------
1891
1892- A completely new downloader which improves performance and
1893  robustness of immutable-file downloads. It uses the fastest K
1894  servers to download the data in K-way parallel. It automatically
1895  fails over to alternate servers if servers fail in mid-download. It
1896  allows seeking to arbitrary locations in the file (the previous
1897  downloader which would only read the entire file sequentially from
1898  beginning to end). It minimizes unnecessary round trips and
1899  unnecessary bytes transferred to improve performance. It sends
1900  requests to fewer servers to reduce the load on servers (the
1901  previous one would send a small request to every server for every
1902  download) (`#287`_, `#288`_, `#448`_, `#798`_, `#800`_, `#990`_,
1903  `#1170`_, `#1191`_)
1904- Non-ASCII command-line arguments and non-ASCII outputs now work on
1905  Windows. In addition, the command-line tool now works on 64-bit
1906  Windows. (`#1074`_)
1907
1908Bugfixes and Improvements
1909-------------------------
1910
1911- Document and clean up the command-line options for specifying the
1912  node's base directory. (`#188`_, `#706`_, `#715`_, `#772`_,
1913  `#1108`_)
1914- The default node directory for Windows is ".tahoe" in the user's
1915  home directory, the same as on other platforms. (`#890`_)
1916- Fix a case in which full cap URIs could be logged. (`#685`_,
1917  `#1155`_)
1918- Fix bug in WUI in Python 2.5 when the system clock is set back to
1919  1969. Now you can use Tahoe-LAFS with Python 2.5 and set your system
1920  clock to 1969 and still use the WUI. (`#1055`_)
1921- Many improvements in code organization, tests, logging,
1922  documentation, and packaging. (`#983`_, `#1074`_, `#1108`_,
1923  `#1127`_, `#1129`_, `#1131`_, `#1166`_, `#1175`_)
1924
1925Dependency Updates
1926------------------
1927
1928- on x86 and x86-64 platforms, pycryptopp >= 0.5.20
1929- pycrypto 2.2 is excluded due to a bug
1930
1931.. _`#188`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/188
1932.. _`#288`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/288
1933.. _`#448`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/448
1934.. _`#685`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/685
1935.. _`#706`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/706
1936.. _`#715`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/715
1937.. _`#772`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/772
1938.. _`#798`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/798
1939.. _`#800`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/800
1940.. _`#890`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/890
1941.. _`#983`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/983
1942.. _`#990`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/990
1943.. _`#1055`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1055
1944.. _`#1074`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1074
1945.. _`#1108`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1108
1946.. _`#1155`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1155
1947.. _`#1170`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1170
1948.. _`#1191`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1191
1949.. _`#1127`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1127
1950.. _`#1129`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1129
1951.. _`#1131`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1131
1952.. _`#1166`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1166
1953.. _`#1175`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1175
1954
1955Release 1.7.1 (2010-07-18)
1956''''''''''''''''''''''''''
1957
1958Bugfixes and Improvements
1959-------------------------
1960
1961- Fix bug in which uploader could fail with AssertionFailure or report
1962  that it had achieved servers-of-happiness when it hadn't. (`#1118`_)
1963- Fix bug in which servers could get into a state where they would
1964  refuse to accept shares of a certain file (`#1117`_)
1965- Add init scripts for managing the gateway server on Debian/Ubuntu
1966  (`#961`_)
1967- Fix bug where server version number was always 0 on the welcome page
1968  (`#1067`_)
1969- Add new command-line command "tahoe unlink" as a synonym for "tahoe
1970  rm" (`#776`_)
1971- The FTP frontend now encrypts its temporary files, protecting their
1972  contents from an attacker who is able to read the disk. (`#1083`_)
1973- Fix IP address detection on FreeBSD 7, 8, and 9 (`#1098`_)
1974- Fix minor layout issue in the Web User Interface with Internet
1975  Explorer (`#1097`_)
1976- Fix rarely-encountered incompatibility between Twisted logging
1977  utility and the new unicode support added in v1.7.0 (`#1099`_)
1978- Forward-compatibility improvements for non-ASCII caps (`#1051`_)
1979
1980Code improvements
1981-----------------
1982
1983- Simplify and tidy-up directories, unicode support, test code
1984  (`#923`_, `#967`_, `#1072`_)
1985
1986.. _`#776`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/776
1987.. _`#923`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/923
1988.. _`#961`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/961
1989.. _`#967`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/967
1990.. _`#1051`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1051
1991.. _`#1067`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1067
1992.. _`#1072`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1072
1993.. _`#1083`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1083
1994.. _`#1097`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1097
1995.. _`#1098`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1098
1996.. _`#1099`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1099
1997.. _`#1117`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1117
1998.. _`#1118`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1118
1999
2000
2001Release 1.7.0 (2010-06-18)
2002''''''''''''''''''''''''''
2003
2004New Features
2005------------
2006
2007- SFTP support (`#1037`_)
2008  Your Tahoe-LAFS gateway now acts like a full-fledged SFTP server. It
2009  has been tested with sshfs to provide a virtual filesystem in Linux.
2010  Many users have asked for this feature.  We hope that it serves them
2011  well! See the `FTP-and-SFTP.rst`_ document to get
2012  started.
2013- support for non-ASCII character encodings (`#534`_)
2014  Tahoe-LAFS now correctly handles filenames containing non-ASCII
2015  characters on all supported platforms:
2016
2017 - when reading files in from the local filesystem (such as when you
2018   run "tahoe backup" to back up your local files to a Tahoe-LAFS
2019   grid);
2020 - when writing files out to the local filesystem (such as when you
2021   run "tahoe cp -r" to recursively copy files out of a Tahoe-LAFS
2022   grid);
2023 - when displaying filenames to the terminal (such as when you run
2024   "tahoe ls"), subject to limitations of the terminal and locale;
2025 - when parsing command-line arguments, except on Windows.
2026
2027- Servers of Happiness (`#778`_)
2028  Tahoe-LAFS now measures during immutable file upload to see how well
2029  distributed it is across multiple servers. It aborts the upload if
2030  the pieces of the file are not sufficiently well-distributed.
2031  This behavior is controlled by a configuration parameter called
2032  "servers of happiness". With the default settings for its erasure
2033  coding, Tahoe-LAFS generates 10 shares for each file, such that any
2034  3 of those shares are sufficient to recover the file. The default
2035  value of "servers of happiness" is 7, which means that Tahoe-LAFS
2036  will guarantee that there are at least 7 servers holding some of the
2037  shares, such that any 3 of those servers can completely recover your
2038  file.  The new upload code also distributes the shares better than the
2039  previous version in some cases and takes better advantage of
2040  pre-existing shares (when a file has already been previously
2041  uploaded). See the `architecture.rst`_ document [3] for details.
2042
2043Bugfixes and Improvements
2044-------------------------
2045
2046- Premature abort of upload if some shares were already present and
2047  some servers fail. (`#608`_)
2048- python ./setup.py install -- can't create or remove files in install
2049  directory. (`#803`_)
2050- Network failure => internal TypeError. (`#902`_)
2051- Install of Tahoe on CentOS 5.4. (`#933`_)
2052- CLI option --node-url now supports https url. (`#1028`_)
2053- HTML/CSS template files were not correctly installed under
2054  Windows. (`#1033`_)
2055- MetadataSetter does not enforce restriction on setting "tahoe"
2056  subkeys.  (`#1034`_)
2057- ImportError: No module named
2058  setuptools_darcs.setuptools_darcs. (`#1054`_)
2059- Renamed Title in xhtml files. (`#1062`_)
2060- Increase Python version dependency to 2.4.4, to avoid a critical
2061  CPython security bug. (`#1066`_)
2062- Typo correction for the munin plugin tahoe_storagespace. (`#968`_)
2063- Fix warnings found by pylint. (`#973`_)
2064- Changing format of some documentation files. (`#1027`_)
2065- the misc/ directory was tied up. (`#1068`_)
2066- The 'ctime' and 'mtime' metadata fields are no longer written except
2067  by "tahoe backup". (`#924`_)
2068- Unicode filenames in Tahoe-LAFS directories are normalized so that
2069  names that differ only in how accents are encoded are treated as the
2070  same. (`#1076`_)
2071- Various small improvements to documentation. (`#937`_, `#911`_,
2072  `#1024`_, `#1082`_)
2073
2074Removals
2075--------
2076
2077- The 'tahoe debug consolidate' subcommand (for converting old
2078  allmydata Windows client backups to a newer format) has been
2079  removed.
2080
2081Dependency Updates
2082------------------
2083
2084- the Python version dependency is raised to 2.4.4 in some cases
2085  (2.4.3 for Redhat-based Linux distributions, 2.4.2 for UCS-2 builds)
2086  (`#1066`_)
2087- pycrypto >= 2.0.1
2088- pyasn1 >= 0.0.8a
2089- mock (only required by unit tests)
2090
2091.. _`#534`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/534
2092.. _`#608`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/608
2093.. _`#778`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/778
2094.. _`#803`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/803
2095.. _`#902`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/902
2096.. _`#911`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/911
2097.. _`#924`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/924
2098.. _`#937`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/937
2099.. _`#933`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/933
2100.. _`#968`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/968
2101.. _`#973`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/973
2102.. _`#1024`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1024
2103.. _`#1027`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1027
2104.. _`#1028`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1028
2105.. _`#1033`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1033
2106.. _`#1034`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1034
2107.. _`#1037`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1037
2108.. _`#1054`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1054
2109.. _`#1062`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1062
2110.. _`#1066`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1066
2111.. _`#1068`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1068
2112.. _`#1076`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1076
2113.. _`#1082`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1082
2114.. _architecture.rst: docs/architecture.rst
2115.. _FTP-and-SFTP.rst: docs/frontends/FTP-and-SFTP.rst
2116
2117Release 1.6.1 (2010-02-27)
2118''''''''''''''''''''''''''
2119
2120Bugfixes
2121--------
2122
2123- Correct handling of Small Immutable Directories
2124
2125  Immutable directories can now be deep-checked and listed in the web
2126  UI in all cases. (In v1.6.0, some operations, such as deep-check, on
2127  a directory graph that included very small immutable directories,
2128  would result in an exception causing the whole operation to abort.)
2129  (`#948`_)
2130
2131Usability Improvements
2132----------------------
2133
2134- Improved user interface messages and error reporting. (`#681`_,
2135  `#837`_, `#939`_)
2136- The timeouts for operation handles have been greatly increased, so
2137  that you can view the results of an operation up to 4 days after it
2138  has completed. After viewing them for the first time, the results
2139  are retained for a further day. (`#577`_)
2140
2141Release 1.6.0 (2010-02-01)
2142''''''''''''''''''''''''''
2143
2144New Features
2145------------
2146
2147- Immutable Directories
2148
2149  Tahoe-LAFS can now create and handle immutable
2150  directories. (`#607`_, `#833`_, `#931`_) These are read just like
2151  normal directories, but are "deep-immutable", meaning that all their
2152  children (and everything reachable from those children) must be
2153  immutable objects (i.e. immutable or literal files, and other
2154  immutable directories).
2155
2156  These directories must be created in a single webapi call that
2157  provides all of the children at once. (Since they cannot be changed
2158  after creation, the usual create/add/add sequence cannot be used.)
2159  They have URIs that start with "URI:DIR2-CHK:" or "URI:DIR2-LIT:",
2160  and are described on the human-facing web interface (aka the "WUI")
2161  with a "DIR-IMM" abbreviation (as opposed to "DIR" for the usual
2162  read-write directories and "DIR-RO" for read-only directories).
2163
2164  Tahoe-LAFS releases before 1.6.0 cannot read the contents of an
2165  immutable directory. 1.5.0 will tolerate their presence in a
2166  directory listing (and display it as "unknown"). 1.4.1 and earlier
2167  cannot tolerate them: a DIR-IMM child in any directory will prevent
2168  the listing of that directory.
2169
2170  Immutable directories are repairable, just like normal immutable
2171  files.
2172
2173  The webapi "POST t=mkdir-immutable" call is used to create immutable
2174  directories. See `webapi.rst`_ for details.
2175
2176- "tahoe backup" now creates immutable directories, backupdb has
2177  dircache
2178
2179  The "tahoe backup" command has been enhanced to create immutable
2180  directories (in previous releases, it created read-only mutable
2181  directories) (`#828`_). This is significantly faster, since it does
2182  not need to create an RSA keypair for each new directory. Also
2183  "DIR-IMM" immutable directories are repairable, unlike "DIR-RO"
2184  read-only mutable directories at present. (A future Tahoe-LAFS
2185  release should also be able to repair DIR-RO.)
2186
2187  In addition, the backupdb (used by "tahoe backup" to remember what
2188  it has already copied) has been enhanced to store information about
2189  existing immutable directories. This allows it to re-use directories
2190  that have moved but still contain identical contents, or that have
2191  been deleted and later replaced. (The 1.5.0 "tahoe backup" command
2192  could only re-use directories that were in the same place as they
2193  were in the immediately previous backup.)  With this change, the
2194  backup process no longer needs to read the previous snapshot out of
2195  the Tahoe-LAFS grid, reducing the network load
2196  considerably. (`#606`_)
2197
2198  A "null backup" (in which nothing has changed since the previous
2199  backup) will require only two Tahoe-side operations: one to add an
2200  Archives/$TIMESTAMP entry, and a second to update the Latest/
2201  link. On the local disk side, it will readdir() all your local
2202  directories and stat() all your local files.
2203
2204  If you've been using "tahoe backup" for a while, you will notice
2205  that your first use of it after upgrading to 1.6.0 may take a long
2206  time: it must create proper immutable versions of all the old
2207  read-only mutable directories. This process won't take as long as
2208  the initial backup (where all the file contents had to be uploaded
2209  too): it will require time proportional to the number and size of
2210  your directories. After this initial pass, all subsequent passes
2211  should take a tiny fraction of the time.
2212
2213  As noted above, Tahoe-LAFS versions earlier than 1.5.0 cannot list a
2214  directory containing an immutable subdirectory. Tahoe-LAFS versions
2215  earlier than 1.6.0 cannot read the contents of an immutable
2216  directory.
2217
2218  The "tahoe backup" command has been improved to skip over unreadable
2219  objects (like device files, named pipes, and files with permissions
2220  that prevent the command from reading their contents), instead of
2221  throwing an exception and terminating the backup process. It also
2222  skips over symlinks, because these cannot be represented faithfully
2223  in the Tahoe-side filesystem. A warning message will be emitted each
2224  time something is skipped. (`#729`_, `#850`_, `#641`_)
2225
2226- "create-node" command added, "create-client" now implies
2227  --no-storage
2228
2229  The basic idea behind Tahoe-LAFS's client+server and client-only
2230  processes is that you are creating a general-purpose Tahoe-LAFS
2231  "node" process, which has several components that can be
2232  activated. Storage service is one of these optional components, as
2233  is the Helper, FTP server, and SFTP server. Web gateway
2234  functionality is nominally on this list, but it is always active; a
2235  future release will make it optional. There are three special
2236  purpose servers that can't currently be run as a component in a
2237  node: introducer, key-generator, and stats-gatherer.
2238
2239  So now "tahoe create-node" will create a Tahoe-LAFS node process,
2240  and after creation you can edit its tahoe.cfg to enable or disable
2241  the desired services. It is a more general-purpose replacement for
2242  "tahoe create-client".  The default configuration has storage
2243  service enabled. For convenience, the "--no-storage" argument makes
2244  a tahoe.cfg file that disables storage service. (`#760`_)
2245
2246  "tahoe create-client" has been changed to create a Tahoe-LAFS node
2247  without a storage service. It is equivalent to "tahoe create-node
2248  --no-storage". This helps to reduce the confusion surrounding the
2249  use of a command with "client" in its name to create a storage
2250  *server*. Use "tahoe create-client" to create a purely client-side
2251  node. If you want to offer storage to the grid, use "tahoe
2252  create-node" instead.
2253
2254  In the future, other services will be added to the node, and they
2255  will be controlled through options in tahoe.cfg . The most important
2256  of these services may get additional --enable-XYZ or --disable-XYZ
2257  arguments to "tahoe create-node".
2258
2259- Performance Improvements
2260
2261  Download of immutable files begins as soon as the downloader has
2262  located the K necessary shares (`#928`_, `#287`_). In both the
2263  previous and current releases, a downloader will first issue queries
2264  to all storage servers on the grid to locate shares before it begins
2265  downloading the shares. In previous releases of Tahoe-LAFS, download
2266  would not begin until all storage servers on the grid had replied to
2267  the query, at which point K shares would be chosen for download from
2268  among the shares that were located. In this release, download begins
2269  as soon as any K shares are located. This means that downloads start
2270  sooner, which is particularly important if there is a server on the
2271  grid that is extremely slow or even hung in such a way that it will
2272  never respond. In previous releases such a server would have a
2273  negative impact on all downloads from that grid. In this release,
2274  such a server will have no impact on downloads, as long as K shares
2275  can be found on other, quicker, servers.  This also means that
2276  downloads now use the "best-alacrity" servers that they talk to, as
2277  measured by how quickly the servers reply to the initial query. This
2278  might cause downloads to go faster, especially on grids with
2279  heterogeneous servers or geographical dispersion.
2280
2281Minor Changes
2282-------------
2283
2284- The webapi acquired a new "t=mkdir-with-children" command, to create
2285  and populate a directory in a single call. This is significantly
2286  faster than using separate "t=mkdir" and "t=set-children" operations
2287  (it uses one gateway-to-grid roundtrip, instead of three or
2288  four). (`#533`_)
2289
2290- The t=set-children (note the hyphen) operation is now documented in
2291  webapi.rst, and is the new preferred spelling of the
2292  old t=set_children (with an underscore). The underscore version
2293  remains for backwards compatibility. (`#381`_, `#927`_)
2294
2295- The tracebacks produced by errors in CLI tools should now be in
2296  plain text, instead of HTML (which is unreadable outside of a
2297  browser). (`#646`_)
2298
2299- The [storage]reserved_space configuration knob (which causes the
2300  storage server to refuse shares when available disk space drops
2301  below a threshold) should work on Windows now, not just
2302  UNIX. (`#637`_)
2303
2304- "tahoe cp" should now exit with status "1" if it cannot figure out a
2305  suitable target filename, such as when you copy from a bare
2306  filecap. (`#761`_)
2307
2308- "tahoe get" no longer creates a zero-length file upon
2309  error. (`#121`_)
2310
2311- "tahoe ls" can now list single files. (`#457`_)
2312
2313- "tahoe deep-check --repair" should tolerate repair failures now,
2314  instead of halting traversal. (`#874`_, `#786`_)
2315
2316- "tahoe create-alias" no longer corrupts the aliases file if it had
2317  previously been edited to have no trailing newline. (`#741`_)
2318
2319- Many small packaging improvements were made to facilitate the
2320  "tahoe-lafs" package being included in Ubuntu. Several mac/win32
2321  binary libraries were removed, some figleaf code-coverage files were
2322  removed, a bundled copy of darcsver-1.2.1 was removed, and
2323  additional licensing text was added.
2324
2325- Several DeprecationWarnings for python2.6 were silenced. (`#859`_)
2326
2327- The checker --add-lease option would sometimes fail for shares
2328  stored on old (Tahoe v1.2.0) servers. (`#875`_)
2329
2330- The documentation for installing on Windows (docs/quickstart.rst)
2331  has been improved. (`#773`_)
2332
2333For other changes not mentioned here, see
2334<https://tahoe-lafs.org/trac/tahoe-lafs/query?milestone=1.6.0&keywords=!~news-done>.
2335To include the tickets mentioned above, go to
2336<https://tahoe-lafs.org/trac/tahoe-lafs/query?milestone=1.6.0>.
2337
2338.. _`#121`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/121
2339.. _`#287`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/287
2340.. _`#381`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/381
2341.. _`#457`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/457
2342.. _`#533`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/533
2343.. _`#577`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/577
2344.. _`#606`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/606
2345.. _`#607`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/607
2346.. _`#637`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/637
2347.. _`#641`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/641
2348.. _`#646`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/646
2349.. _`#681`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/681
2350.. _`#729`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/729
2351.. _`#741`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/741
2352.. _`#760`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/760
2353.. _`#761`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/761
2354.. _`#773`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/773
2355.. _`#786`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/786
2356.. _`#828`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/828
2357.. _`#833`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/833
2358.. _`#859`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/859
2359.. _`#874`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/874
2360.. _`#875`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/875
2361.. _`#931`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/931
2362.. _`#837`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/837
2363.. _`#850`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/850
2364.. _`#927`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/927
2365.. _`#928`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/928
2366.. _`#939`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/939
2367.. _`#948`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/948
2368.. _webapi.rst: docs/frontends/webapi.rst
2369
2370Release 1.5.0 (2009-08-01)
2371''''''''''''''''''''''''''
2372
2373Improvements
2374------------
2375
2376- Uploads of immutable files now use pipelined writes, improving
2377  upload speed slightly (10%) over high-latency connections. (`#392`_)
2378
2379- Processing large directories has been sped up, by removing a O(N^2)
2380  algorithm from the dirnode decoding path and retaining unmodified
2381  encrypted entries.  (`#750`_, `#752`_)
2382
2383- The human-facing web interface (aka the "WUI") received a
2384  significant CSS makeover by Kevin Reid, making it much prettier and
2385  easier to read. The WUI "check" and "deep-check" forms now include a
2386  "Renew Lease" checkbox, mirroring the CLI --add-lease option, so
2387  leases can be added or renewed from the web interface.
2388
2389- The CLI "tahoe mv" command now refuses to overwrite
2390  directories. (`#705`_)
2391
2392- The CLI "tahoe webopen" command, when run without arguments, will
2393  now bring up the "Welcome Page" (node status and mkdir/upload
2394  forms).
2395
2396- The 3.5MB limit on mutable files was removed, so it should be
2397  possible to upload arbitrarily-sized mutable files. Note, however,
2398  that the data format and algorithm remains the same, so using
2399  mutable files still requires bandwidth, computation, and RAM in
2400  proportion to the size of the mutable file.  (`#694`_)
2401
2402- This version of Tahoe-LAFS will tolerate directory entries that
2403  contain filecap formats which it does not recognize: files and
2404  directories from the future.  This should improve the user
2405  experience (for 1.5.0 users) when we add new cap formats in the
2406  future. Previous versions would fail badly, preventing the user from
2407  seeing or editing anything else in those directories. These
2408  unrecognized objects can be renamed and deleted, but obviously not
2409  read or written. Also they cannot generally be copied. (`#683`_)
2410
2411Bugfixes
2412--------
2413
2414- deep-check-and-repair now tolerates read-only directories, such as
2415  the ones produced by the "tahoe backup" CLI command. Read-only
2416  directories and mutable files are checked, but not
2417  repaired. Previous versions threw an exception when attempting the
2418  repair and failed to process the remaining contents. We cannot yet
2419  repair these read-only objects, but at least this version allows the
2420  rest of the check+repair to proceed. (`#625`_)
2421
2422- A bug in 1.4.1 which caused a server to be listed multiple times
2423  (and frequently broke all connections to that server) was
2424  fixed. (`#653`_)
2425
2426- The plaintext-hashing code was removed from the Helper interface,
2427  removing the Helper's ability to mount a
2428  partial-information-guessing attack. (`#722`_)
2429
2430Platform/packaging changes
2431--------------------------
2432
2433- Tahoe-LAFS now runs on NetBSD, OpenBSD, ArchLinux, and NixOS, and on
2434  an embedded system based on an ARM CPU running at 266 MHz.
2435
2436- Unit test timeouts have been raised to allow the tests to complete
2437  on extremely slow platforms like embedded ARM-based NAS boxes, which
2438  may take several hours to run the test suite. An ARM-specific
2439  data-corrupting bug in an older version of Crypto++ (5.5.2) was
2440  identified: ARM-users are encouraged to use recent
2441  Crypto++/pycryptopp which avoids this problem.
2442
2443- Tahoe-LAFS now requires a SQLite library, either the sqlite3 that
2444  comes built-in with python2.5/2.6, or the add-on pysqlite2 if you're
2445  using python2.4. In the previous release, this was only needed for
2446  the "tahoe backup" command: now it is mandatory.
2447
2448- Several minor documentation updates were made.
2449
2450- To help get Tahoe-LAFS into Linux distributions like Fedora and
2451  Debian, packaging improvements are being made in both Tahoe-LAFS and
2452  related libraries like pycryptopp and zfec.
2453
2454- The Crypto++ library included in the pycryptopp package has been
2455  upgraded to version 5.6.0 of Crypto++, which includes a more
2456  efficient implementation of SHA-256 in assembly for x86 or amd64
2457  architectures.
2458
2459dependency updates
2460------------------
2461
2462- foolscap-0.4.1
2463- no python-2.4.0 or 2.4.1 (2.4.2 is good) (they contained a bug in base64.b32decode)
2464- avoid python-2.6 on windows with mingw: compiler issues
2465- python2.4 requires pysqlite2 (2.5,2.6 does not)
2466- no python-3.x
2467- pycryptopp-0.5.15
2468
2469.. _#392: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/392
2470.. _#625: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/625
2471.. _#653: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/653
2472.. _#683: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/683
2473.. _#694: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/694
2474.. _#705: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/705
2475.. _#722: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/722
2476.. _#750: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/750
2477.. _#752: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/752
2478
2479Release 1.4.1 (2009-04-13)
2480''''''''''''''''''''''''''
2481
2482Garbage Collection
2483------------------
2484
2485- The big feature for this release is the implementation of garbage
2486  collection, allowing Tahoe storage servers to delete shares for old
2487  deleted files. When enabled, this uses a "mark and sweep" process:
2488  clients are responsible for updating the leases on their shares
2489  (generally by running "tahoe deep-check --add-lease"), and servers
2490  are allowed to delete any share which does not have an up-to-date
2491  lease. The process is described in detail in
2492  `garbage-collection.rst`_.
2493
2494  The server must be configured to enable garbage-collection, by
2495  adding directives to the [storage] section that define an age limit
2496  for shares. The default configuration will not delete any shares.
2497
2498  Both servers and clients should be upgraded to this release to make
2499  the garbage-collection as pleasant as possible. 1.2.0 servers have
2500  code to perform the update-lease operation but it suffers from a
2501  fatal bug, while 1.3.0 servers have update-lease but will return an
2502  exception for unknown storage indices, causing clients to emit an
2503  Incident for each exception, slowing the add-lease process down to a
2504  crawl. 1.1.0 servers did not have the add-lease operation at all.
2505
2506Security/Usability Problems Fixed
2507---------------------------------
2508
2509- A super-linear algorithm in the Merkle Tree code was fixed, which
2510  previously caused e.g. download of a 10GB file to take several hours
2511  before the first byte of plaintext could be produced. The new
2512  "alacrity" is about 2 minutes. A future release should reduce this
2513  to a few seconds by fixing ticket `#442`_.
2514
2515- The previous version permitted a small timing attack (due to our use
2516  of strcmp) against the write-enabler and lease-renewal/cancel
2517  secrets. An attacker who could measure response-time variations of
2518  approximatly 3ns against a very noisy background time of about 15ms
2519  might be able to guess these secrets. We do not believe this attack
2520  was actually feasible. This release closes the attack by first
2521  hashing the two strings to be compared with a random secret.
2522
2523webapi changes
2524--------------
2525
2526- In most cases, HTML tracebacks will only be sent if an "Accept:
2527  text/html" header was provided with the HTTP request. This will
2528  generally cause browsers to get an HTMLized traceback but send
2529  regular text/plain tracebacks to non-browsers (like the CLI
2530  clients). More errors have been mapped to useful HTTP error codes.
2531
2532- The streaming webapi operations (deep-check and manifest) now have a
2533  way to indicate errors (an output line that starts with "ERROR"
2534  instead of being legal JSON). See `webapi.rst`_ for
2535  details.
2536
2537- The storage server now has its own status page (at /storage), linked
2538  from the Welcome page. This page shows progress and results of the
2539  two new share-crawlers: one which merely counts shares (to give an
2540  estimate of how many files/directories are being stored in the
2541  grid), the other examines leases and reports how much space would be
2542  freed if GC were enabled. The page also shows how much disk space is
2543  present, used, reserved, and available for the Tahoe server, and
2544  whether the server is currently running in "read-write" mode or
2545  "read-only" mode.
2546
2547- When a directory node cannot be read (perhaps because of insufficent
2548  shares), a minimal webapi page is created so that the "more-info"
2549  links (including a Check/Repair operation) will still be accessible.
2550
2551- A new "reliability" page was added, with the beginnings of work on a
2552  statistical loss model. You can tell this page how many servers you
2553  are using and their independent failure probabilities, and it will
2554  tell you the likelihood that an arbitrary file will survive each
2555  repair period. The "numpy" package must be installed to access this
2556  page. A partial paper, written by Shawn Willden, has been added to
2557  docs/proposed/lossmodel.lyx .
2558
2559CLI changes
2560-----------
2561
2562- "tahoe check" and "tahoe deep-check" now accept an "--add-lease"
2563  argument, to update a lease on all shares. This is the "mark" side
2564  of garbage collection.
2565
2566- In many cases, CLI error messages have been improved: the ugly
2567  HTMLized traceback has been replaced by a normal python traceback.
2568
2569- "tahoe deep-check" and "tahoe manifest" now have better error
2570  reporting.  "tahoe cp" is now non-verbose by default.
2571
2572- "tahoe backup" now accepts several "--exclude" arguments, to ignore
2573  certain files (like editor temporary files and version-control
2574  metadata) during backup.
2575
2576- On windows, the CLI now accepts local paths like "c:\dir\file.txt",
2577  which previously was interpreted as a Tahoe path using a "c:" alias.
2578
2579- The "tahoe restart" command now uses "--force" by default (meaning
2580  it will start a node even if it didn't look like there was one
2581  already running).
2582
2583- The "tahoe debug consolidate" command was added. This takes a series
2584  of independent timestamped snapshot directories (such as those
2585  created by the allmydata.com windows backup program, or a series of
2586  "tahoe cp -r" commands) and creates new snapshots that used shared
2587  read-only directories whenever possible (like the output of "tahoe
2588  backup"). In the most common case (when the snapshots are fairly
2589  similar), the result will use significantly fewer directories than
2590  the original, allowing "deep-check" and similar tools to run much
2591  faster. In some cases, the speedup can be an order of magnitude or
2592  more.  This tool is still somewhat experimental, and only needs to
2593  be run on large backups produced by something other than "tahoe
2594  backup", so it was placed under the "debug" category.
2595
2596- "tahoe cp -r --caps-only tahoe:dir localdir" is a diagnostic tool
2597  which, instead of copying the full contents of files into the local
2598  directory, merely copies their filecaps. This can be used to verify
2599  the results of a "consolidation" operation.
2600
2601other fixes
2602-----------
2603
2604- The codebase no longer rauses RuntimeError as a kind of
2605  assert(). Specific exception classes were created for each previous
2606  instance of RuntimeError.
2607
2608- Many unit tests were changed to use a non-network test harness,
2609  speeding them up considerably.
2610
2611- Deep-traversal operations (manifest and deep-check) now walk
2612  individual directories in alphabetical order. Occasional turn breaks
2613  are inserted to prevent a stack overflow when traversing directories
2614  with hundreds of entries.
2615
2616- The experimental SFTP server had its path-handling logic changed
2617  slightly, to accomodate more SFTP clients, although there are still
2618  issues (`#645`_).
2619
2620.. _#442: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/442
2621.. _#645: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/645
2622.. _garbage-collection.rst: docs/garbage-collection.rst
2623
2624Release 1.3.0 (2009-02-13)
2625''''''''''''''''''''''''''
2626
2627Checker/Verifier/Repairer
2628-------------------------
2629
2630- The primary focus of this release has been writing a checker /
2631  verifier / repairer for files and directories.  "Checking" is the
2632  act of asking storage servers whether they have a share for the
2633  given file or directory: if there are not enough shares available,
2634  the file or directory will be unrecoverable. "Verifying" is the act
2635  of downloading and cryptographically asserting that the server's
2636  share is undamaged: it requires more work (bandwidth and CPU) than
2637  checking, but can catch problems that simple checking
2638  cannot. "Repair" is the act of replacing missing or damaged shares
2639  with new ones.
2640
2641- This release includes a full checker, a partial verifier, and a
2642  partial repairer. The repairer is able to handle missing shares: new
2643  shares are generated and uploaded to make up for the missing
2644  ones. This is currently the best application of the repairer: to
2645  replace shares that were lost because of server departure or
2646  permanent drive failure.
2647
2648- The repairer in this release is somewhat able to handle corrupted
2649  shares. The limitations are:
2650
2651 - Immutable verifier is incomplete: not all shares are used, and not
2652   all fields of those shares are verified. Therefore the immutable
2653   verifier has only a moderate chance of detecting corrupted shares.
2654 - The mutable verifier is mostly complete: all shares are examined,
2655   and most fields of the shares are validated.
2656 - The storage server protocol offers no way for the repairer to
2657   replace or delete immutable shares. If corruption is detected, the
2658   repairer will upload replacement shares to other servers, but the
2659   corrupted shares will be left in place.
2660 - read-only directories and read-only mutable files must be repaired
2661   by someone who holds the write-cap: the read-cap is
2662   insufficient. Moreover, the deep-check-and-repair operation will
2663   halt with an error if it attempts to repair one of these read-only
2664   objects.
2665 - Some forms of corruption can cause both download and repair
2666   operations to fail. A future release will fix this, since download
2667   should be tolerant of any corruption as long as there are at least
2668   'k' valid shares, and repair should be able to fix any file that is
2669   downloadable.
2670
2671- If the downloader, verifier, or repairer detects share corruption,
2672  the servers which provided the bad shares will be notified (via a
2673  file placed in the BASEDIR/storage/corruption-advisories directory)
2674  so their operators can manually delete the corrupted shares and
2675  investigate the problem. In addition, the "incident gatherer"
2676  mechanism will automatically report share corruption to an incident
2677  gatherer service, if one is configured. Note that corrupted shares
2678  indicate hardware failures, serious software bugs, or malice on the
2679  part of the storage server operator, so a corrupted share should be
2680  considered highly unusual.
2681
2682- By periodically checking/repairing all files and directories,
2683  objects in the Tahoe filesystem remain resistant to recoverability
2684  failures due to missing and/or broken servers.
2685
2686- This release includes a wapi mechanism to initiate checks on
2687  individual files and directories (with or without verification, and
2688  with or without automatic repair). A related mechanism is used to
2689  initiate a "deep-check" on a directory: recursively traversing the
2690  directory and its children, checking (and/or verifying/repairing)
2691  everything underneath. Both mechanisms can be run with an
2692  "output=JSON" argument, to obtain machine-readable check/repair
2693  status results. These results include a copy of the filesystem
2694  statistics from the "deep-stats" operation (including total number
2695  of files, size histogram, etc). If repair is possible, a "Repair"
2696  button will appear on the results page.
2697
2698- The client web interface now features some extra buttons to initiate
2699  check and deep-check operations. When these operations finish, they
2700  display a results page that summarizes any problems that were
2701  encountered. All long-running deep-traversal operations, including
2702  deep-check, use a start-and-poll mechanism, to avoid depending upon
2703  a single long-lived HTTP connection. `webapi.rst`_ has
2704  details.
2705
2706Efficient Backup
2707----------------
2708
2709- The "tahoe backup" command is new in this release, which creates
2710  efficient versioned backups of a local directory. Given a local
2711  pathname and a target Tahoe directory, this will create a read-only
2712  snapshot of the local directory in $target/Archives/$timestamp. It
2713  will also create $target/Latest, which is a reference to the latest
2714  such snapshot. Each time you run "tahoe backup" with the same source
2715  and target, a new $timestamp snapshot will be added. These snapshots
2716  will share directories that have not changed since the last backup,
2717  to speed up the process and minimize storage requirements. In
2718  addition, a small database is used to keep track of which local
2719  files have been uploaded already, to avoid uploading them a second
2720  time. This drastically reduces the work needed to do a "null backup"
2721  (when nothing has changed locally), making "tahoe backup' suitable
2722  to run from a daily cronjob.
2723
2724  Note that the "tahoe backup" CLI command must be used in conjunction
2725  with a 1.3.0-or-newer Tahoe client node; there was a bug in the
2726  1.2.0 webapi implementation that would prevent the last step (create
2727  $target/Latest) from working.
2728
2729Large Files
2730-----------
2731
2732- The 12GiB (approximate) immutable-file-size limitation is
2733  lifted. This release knows how to handle so-called "v2 immutable
2734  shares", which permit immutable files of up to about 18 EiB (about
2735  3*10^14). These v2 shares are created if the file to be uploaded is
2736  too large to fit into v1 shares. v1 shares are created if the file
2737  is small enough to fit into them, so that files created with
2738  tahoe-1.3.0 can still be read by earlier versions if they are not
2739  too large. Note that storage servers also had to be changed to
2740  support larger files, and this release is the first release in which
2741  they are able to do that. Clients will detect which servers are
2742  capable of supporting large files on upload and will not attempt to
2743  upload shares of a large file to a server which doesn't support it.
2744
2745FTP/SFTP Server
2746---------------
2747
2748- Tahoe now includes experimental FTP and SFTP servers. When
2749  configured with a suitable method to translate username+password
2750  into a root directory cap, it provides simple access to the virtual
2751  filesystem. Remember that FTP is completely unencrypted: passwords,
2752  filenames, and file contents are all sent over the wire in
2753  cleartext, so FTP should only be used on a local (127.0.0.1)
2754  connection. This feature is still in development: there are no unit
2755  tests yet, and behavior with respect to Unicode filenames is
2756  uncertain. Please see `FTP-and-SFTP.rst`_ for
2757  configuration details. (`#512`_, `#531`_)
2758
2759CLI Changes
2760-----------
2761
2762- This release adds the 'tahoe create-alias' command, which is a
2763  combination of 'tahoe mkdir' and 'tahoe add-alias'. This also allows
2764  you to start using a new tahoe directory without exposing its URI in
2765  the argv list, which is publicly visible (through the process table)
2766  on most unix systems.  Thanks to Kevin Reid for bringing this issue
2767  to our attention.
2768
2769- The single-argument form of "tahoe put" was changed to create an
2770  unlinked file. I.e. "tahoe put bar.txt" will take the contents of a
2771  local "bar.txt" file, upload them to the grid, and print the
2772  resulting read-cap; the file will not be attached to any
2773  directories. This seemed a bit more useful than the previous
2774  behavior (copy stdin, upload to the grid, attach the resulting file
2775  into your default tahoe: alias in a child named 'bar.txt').
2776
2777- "tahoe put" was also fixed to handle mutable files correctly: "tahoe
2778  put bar.txt URI:SSK:..." will read the contents of the local bar.txt
2779  and use them to replace the contents of the given mutable file.
2780
2781- The "tahoe webopen" command was modified to accept aliases. This
2782  means "tahoe webopen tahoe:" will cause your web browser to open to
2783  a "wui" page that gives access to the directory associated with the
2784  default "tahoe:" alias. It should also accept leading slashes, like
2785  "tahoe webopen tahoe:/stuff".
2786
2787- Many esoteric debugging commands were moved down into a "debug"
2788  subcommand:
2789
2790 - tahoe debug dump-cap
2791 - tahoe debug dump-share
2792 - tahoe debug find-shares
2793 - tahoe debug catalog-shares
2794 - tahoe debug corrupt-share
2795
2796   The last command ("tahoe debug corrupt-share") flips a random bit
2797   of the given local sharefile. This is used to test the file
2798   verifying/repairing code, and obviously should not be used on user
2799   data.
2800
2801The cli might not correctly handle arguments which contain non-ascii
2802characters in Tahoe v1.3 (although depending on your platform it
2803might, especially if your platform can be configured to pass such
2804characters on the command-line in utf-8 encoding).  See
2805https://tahoe-lafs.org/trac/tahoe-lafs/ticket/565 for details.
2806
2807Web changes
2808-----------
2809
2810- The "default webapi port", used when creating a new client node (and
2811  in the getting-started documentation), was changed from 8123 to
2812  3456, to reduce confusion when Tahoe accessed through a Firefox
2813  browser on which the "Torbutton" extension has been installed. Port
2814  8123 is occasionally used as a Tor control port, so Torbutton adds
2815  8123 to Firefox's list of "banned ports" to avoid CSRF attacks
2816  against Tor. Once 8123 is banned, it is difficult to diagnose why
2817  you can no longer reach a Tahoe node, so the Tahoe default was
2818  changed. Note that 3456 is reserved by IANA for the "vat" protocol,
2819  but there are argueably more Torbutton+Tahoe users than vat users
2820  these days. Note that this will only affect newly-created client
2821  nodes. Pre-existing client nodes, created by earlier versions of
2822  tahoe, may still be listening on 8123.
2823
2824- All deep-traversal operations (start-manifest, start-deep-size,
2825  start-deep-stats, start-deep-check) now use a start-and-poll
2826  approach, instead of using a single (fragile) long-running
2827  synchronous HTTP connection. All these "start-" operations use POST
2828  instead of GET. The old "GET manifest", "GET deep-size", and "POST
2829  deep-check" operations have been removed.
2830
2831- The new "POST start-manifest" operation, when it finally completes,
2832  results in a table of (path,cap), instead of the list of verifycaps
2833  produced by the old "GET manifest". The table is available in
2834  several formats: use output=html, output=text, or output=json to
2835  choose one. The JSON output also includes stats, and a list of
2836  verifycaps and storage-index strings. The "return_to=" and
2837  "when_done=" arguments have been removed from the t=check and
2838  deep-check operations.
2839
2840- The top-level status page (/status) now has a machine-readable form,
2841  via "/status/?t=json". This includes information about the
2842  currently-active uploads and downloads, which may be useful for
2843  frontends that wish to display progress information. There is no
2844  easy way to correlate the activities displayed here with recent wapi
2845  requests, however.
2846
2847- Any files in BASEDIR/public_html/ (configurable) will be served in
2848  response to requests in the /static/ portion of the URL space. This
2849  will simplify the deployment of javascript-based frontends that can
2850  still access wapi calls by conforming to the (regrettable)
2851  "same-origin policy".
2852
2853- The welcome page now has a "Report Incident" button, which is tied
2854  into the "Incident Gatherer" machinery. If the node is attached to
2855  an incident gatherer (via log_gatherer.furl), then pushing this
2856  button will cause an Incident to be signalled: this means recent log
2857  events are aggregated and sent in a bundle to the gatherer. The user
2858  can push this button after something strange takes place (and they
2859  can provide a short message to go along with it), and the relevant
2860  data will be delivered to a centralized incident-gatherer for later
2861  processing by operations staff.
2862
2863- The "HEAD" method should now work correctly, in addition to the
2864  usual "GET", "PUT", and "POST" methods. "HEAD" is supposed to return
2865  exactly the same headers as "GET" would, but without any of the
2866  actual response body data. For mutable files, this now does a brief
2867  mapupdate (to figure out the size of the file that would be
2868  returned), without actually retrieving the file's contents.
2869
2870- The "GET" operation on files can now support the HTTP "Range:"
2871  header, allowing requests for partial content. This allows certain
2872  media players to correctly stream audio and movies out of a Tahoe
2873  grid. The current implementation uses a disk-based cache in
2874  BASEDIR/private/cache/download , which holds the plaintext of the
2875  files being downloaded. Future implementations might not use this
2876  cache. GET for immutable files now returns an ETag header.
2877
2878- Each file and directory now has a "Show More Info" web page, which
2879  contains much of the information that was crammed into the directory
2880  page before. This includes readonly URIs, storage index strings,
2881  object type, buttons to control checking/verifying/repairing, and
2882  deep-check/deep-stats buttons (for directories). For mutable files,
2883  the "replace contents" upload form has been moved here too. As a
2884  result, the directory page is now much simpler and cleaner, and
2885  several potentially-misleading links (like t=uri) are now gone.
2886
2887- Slashes are discouraged in Tahoe file/directory names, since they
2888  cause problems when accessing the filesystem through the
2889  wapi. However, there are a couple of accidental ways to generate
2890  such names. This release tries to make it easier to correct such
2891  mistakes by escaping slashes in several places, allowing slashes in
2892  the t=info and t=delete commands, and in the source (but not the
2893  target) of a t=rename command.
2894
2895Packaging
2896---------
2897
2898- Tahoe's dependencies have been extended to require the
2899  "[secure_connections]" feature from Foolscap, which will cause
2900  pyOpenSSL to be required and/or installed. If OpenSSL and its
2901  development headers are already installed on your system, this can
2902  occur automatically. Tahoe now uses pollreactor (instead of the
2903  default selectreactor) to work around a bug between pyOpenSSL and
2904  the most recent release of Twisted (8.1.0). This bug only affects
2905  unit tests (hang during shutdown), and should not impact regular
2906  use.
2907
2908- The Tahoe source code tarballs now come in two different forms:
2909  regular and "sumo". The regular tarball contains just Tahoe, nothing
2910  else. When building from the regular tarball, the build process will
2911  download any unmet dependencies from the internet (starting with the
2912  index at PyPI) so it can build and install them. The "sumo" tarball
2913  contains copies of all the libraries that Tahoe requires (foolscap,
2914  twisted, zfec, etc), so using the "sumo" tarball should not require
2915  any internet access during the build process. This can be useful if
2916  you want to build Tahoe while on an airplane, a desert island, or
2917  other bandwidth-limited environments.
2918
2919- Similarly, tahoe-lafs.org now hosts a "tahoe-deps" tarball which
2920  contains the latest versions of all these dependencies. This
2921  tarball, located at
2922  https://tahoe-lafs.org/source/tahoe/deps/tahoe-deps.tar.gz, can be
2923  unpacked in the tahoe source tree (or in its parent directory), and
2924  the build process should satisfy its downloading needs from it
2925  instead of reaching out to PyPI.  This can be useful if you want to
2926  build Tahoe from a darcs checkout while on that airplane or desert
2927  island.
2928
2929- Because of the previous two changes ("sumo" tarballs and the
2930  "tahoe-deps" bundle), most of the files have been removed from
2931  misc/dependencies/ . This brings the regular Tahoe tarball down to
2932  2MB (compressed), and the darcs checkout (without history) to about
2933  7.6MB. A full darcs checkout will still be fairly large (because of
2934  the historical patches which included the dependent libraries), but
2935  a 'lazy' one should now be small.
2936
2937- The default "make" target is now an alias for "setup.py build",
2938  which itself is an alias for "setup.py develop --prefix support",
2939  with some extra work before and after (see setup.cfg). Most of the
2940  complicated platform-dependent code in the Makefile was rewritten in
2941  Python and moved into setup.py, simplifying things considerably.
2942
2943- Likewise, the "make test" target now delegates most of its work to
2944  "setup.py test", which takes care of getting PYTHONPATH configured
2945  to access the tahoe code (and dependencies) that gets put in
2946  support/lib/ by the build_tahoe step. This should allow unit tests
2947  to be run even when trial (which is part of Twisted) wasn't already
2948  installed (in this case, trial gets installed to support/bin because
2949  Twisted is a dependency of Tahoe).
2950
2951- Tahoe is now compatible with the recently-released Python 2.6 ,
2952  although it is recommended to use Tahoe on Python 2.5, on which it
2953  has received more thorough testing and deployment.
2954
2955- Tahoe is now compatible with simplejson-2.0.x . The previous release
2956  assumed that simplejson.loads always returned unicode strings, which
2957  is no longer the case in 2.0.x .
2958
2959Grid Management Tools
2960---------------------
2961
2962- Several tools have been added or updated in the misc/ directory,
2963  mostly munin plugins that can be used to monitor a storage grid.
2964
2965 - The misc/spacetime/ directory contains a "disk watcher" daemon
2966   (startable with 'tahoe start'), which can be configured with a set
2967   of HTTP URLs (pointing at the wapi '/statistics' page of a bunch of
2968   storage servers), and will periodically fetch
2969   disk-used/disk-available information from all the servers. It keeps
2970   this information in an Axiom database (a sqlite-based library
2971   available from divmod.org). The daemon computes time-averaged rates
2972   of disk usage, as well as a prediction of how much time is left
2973   before the grid is completely full.
2974
2975 - The misc/munin/ directory contains a new set of munin plugins
2976   (tahoe_diskleft, tahoe_diskusage, tahoe_doomsday) which talk to the
2977   disk-watcher and provide graphs of its calculations.
2978
2979 - To support the disk-watcher, the Tahoe statistics component
2980   (visible through the wapi at the /statistics/ URL) now includes
2981   disk-used and disk-available information. Both are derived through
2982   an equivalent of the unix 'df' command (i.e. they ask the kernel
2983   for the number of free blocks on the partition that encloses the
2984   BASEDIR/storage directory). In the future, the disk-available
2985   number will be further influenced by the local storage policy: if
2986   that policy says that the server should refuse new shares when less
2987   than 5GB is left on the partition, then "disk-available" will
2988   report zero even though the kernel sees 5GB remaining.
2989
2990 - The 'tahoe_overhead' munin plugin interacts with an
2991   allmydata.com-specific server which reports the total of the
2992   'deep-size' reports for all active user accounts, compares this
2993   with the disk-watcher data, to report on overhead percentages. This
2994   provides information on how much space could be recovered once
2995   Tahoe implements some form of garbage collection.
2996
2997Configuration Changes: single INI-format tahoe.cfg file
2998-------------------------------------------------------
2999
3000- The Tahoe node is now configured with a single INI-format file,
3001  named "tahoe.cfg", in the node's base directory. Most of the
3002  previous multiple-separate-files are still read for backwards
3003  compatibility (the embedded SSH debug server and the
3004  advertised_ip_addresses files are the exceptions), but new
3005  directives will only be added to tahoe.cfg . The "tahoe
3006  create-client" command will create a tahoe.cfg for you, with sample
3007  values commented out. (ticket `#518`_)
3008
3009- tahoe.cfg now has controls for the foolscap "keepalive" and
3010  "disconnect" timeouts (`#521`_).
3011
3012- tahoe.cfg now has controls for the encoding parameters:
3013  "shares.needed" and "shares.total" in the "[client]" section. The
3014  default parameters are still 3-of-10.
3015
3016- The inefficient storage 'sizelimit' control (which established an
3017  upper bound on the amount of space that a storage server is allowed
3018  to consume) has been replaced by a lightweight 'reserved_space'
3019  control (which establishes a lower bound on the amount of remaining
3020  space). The storage server will reject all writes that would cause
3021  the remaining disk space (as measured by a '/bin/df' equivalent) to
3022  drop below this value. The "[storage]reserved_space=" tahoe.cfg
3023  parameter controls this setting. (note that this only affects
3024  immutable shares: it is an outstanding bug that reserved_space does
3025  not prevent the allocation of new mutable shares, nor does it
3026  prevent the growth of existing mutable shares).
3027
3028Other Changes
3029-------------
3030
3031- Clients now declare which versions of the protocols they
3032  support. This is part of a new backwards-compatibility system:
3033  https://tahoe-lafs.org/trac/tahoe-lafs/wiki/Versioning .
3034
3035- The version strings for human inspection (as displayed on the
3036  Welcome web page, and included in logs) now includes a platform
3037  identifer (frequently including a linux distribution name, processor
3038  architecture, etc).
3039
3040- Several bugs have been fixed, including one that would cause an
3041  exception (in the logs) if a wapi download operation was cancelled
3042  (by closing the TCP connection, or pushing the "stop" button in a
3043  web browser).
3044
3045- Tahoe now uses Foolscap "Incidents", writing an "incident report"
3046  file to logs/incidents/ each time something weird occurs. These
3047  reports are available to an "incident gatherer" through the flogtool
3048  command. For more details, please see the Foolscap logging
3049  documentation. An incident-classifying plugin function is provided
3050  in misc/incident-gatherer/classify_tahoe.py .
3051
3052- If clients detect corruption in shares, they now automatically
3053  report it to the server holding that share, if it is new enough to
3054  accept the report.  These reports are written to files in
3055  BASEDIR/storage/corruption-advisories .
3056
3057- The 'nickname' setting is now defined to be a UTF-8 -encoded string,
3058  allowing non-ascii nicknames.
3059
3060- The 'tahoe start' command will now accept a --syslog argument and
3061  pass it through to twistd, making it easier to launch non-Tahoe
3062  nodes (like the cpu-watcher) and have them log to syslogd instead of
3063  a local file. This is useful when running a Tahoe node out of a USB
3064  flash drive.
3065
3066- The Mac GUI in src/allmydata/gui/ has been improved.
3067
3068.. _#512: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/512
3069.. _#518: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/518
3070.. _#521: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/521
3071.. _#531: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/531
3072
3073Release 1.2.0 (2008-07-21)
3074''''''''''''''''''''''''''
3075
3076Security
3077--------
3078
3079- This release makes the immutable-file "ciphertext hash tree"
3080  mandatory.  Previous releases allowed the uploader to decide whether
3081  their file would have an integrity check on the ciphertext or not. A
3082  malicious uploader could use this to create a readcap that would
3083  download as one file or a different one, depending upon which shares
3084  the client fetched first, with no errors raised. There are other
3085  integrity checks on the shares themselves, preventing a storage
3086  server or other party from violating the integrity properties of the
3087  read-cap: this failure was only exploitable by the uploader who
3088  gives you a carefully constructed read-cap. If you download the file
3089  with Tahoe 1.2.0 or later, you will not be vulnerable to this
3090  problem. `#491`_
3091
3092  This change does not introduce a compatibility issue, because all
3093  existing versions of Tahoe will emit the ciphertext hash tree in
3094  their shares.
3095
3096Dependencies
3097------------
3098
3099- Tahoe now requires Foolscap-0.2.9 . It also requires pycryptopp 0.5
3100  or newer, since earlier versions had a bug that interacted with
3101  specific compiler versions that could sometimes result in incorrect
3102  encryption behavior. Both packages are included in the Tahoe source
3103  tarball in misc/dependencies/ , and should be built automatically
3104  when necessary.
3105
3106Web API
3107-------
3108
3109- Web API directory pages should now contain properly-slash-terminated
3110  links to other directories. They have also stopped using absolute
3111  links in forms and pages (which interfered with the use of a
3112  front-end load-balancing proxy).
3113
3114- The behavior of the "Check This File" button changed, in conjunction
3115  with larger internal changes to file checking/verification. The
3116  button triggers an immediate check as before, but the outcome is
3117  shown on its own page, and does not get stored anywhere. As a
3118  result, the web directory page no longer shows historical checker
3119  results.
3120
3121- A new "Deep-Check" button has been added, which allows a user to
3122  initiate a recursive check of the given directory and all files and
3123  directories reachable from it. This can cause quite a bit of work,
3124  and has no intermediate progress information or feedback about the
3125  process. In addition, the results of the deep-check are extremely
3126  limited. A later release will improve this behavior.
3127
3128- The web server's behavior with respect to non-ASCII (unicode)
3129  filenames in the "GET save=true" operation has been improved. To
3130  achieve maximum compatibility with variously buggy web browsers, the
3131  server does not try to figure out the character set of the inbound
3132  filename. It just echoes the same bytes back to the browser in the
3133  Content-Disposition header. This seems to make both IE7 and Firefox
3134  work correctly.
3135
3136Checker/Verifier/Repairer
3137-------------------------
3138
3139- Tahoe is slowly acquiring convenient tools to check up on file
3140  health, examine existing shares for errors, and repair files that
3141  are not fully healthy. This release adds a mutable
3142  checker/verifier/repairer, although testing is very limited, and
3143  there are no web interfaces to trigger repair yet. The "Check"
3144  button next to each file or directory on the wapi page will perform
3145  a file check, and the "deep check" button on each directory will
3146  recursively check all files and directories reachable from there
3147  (which may take a very long time).
3148
3149  Future releases will improve access to this functionality.
3150
3151Operations/Packaging
3152--------------------
3153
3154- A "check-grid" script has been added, along with a Makefile
3155  target. This is intended (with the help of a pre-configured node
3156  directory) to check upon the health of a Tahoe grid, uploading and
3157  downloading a few files. This can be used as a monitoring tool for a
3158  deployed grid, to be run periodically and to signal an error if it
3159  ever fails. It also helps with compatibility testing, to verify that
3160  the latest Tahoe code is still able to handle files created by an
3161  older version.
3162
3163- The munin plugins from misc/munin/ are now copied into any generated
3164  debian packages, and are made executable (and uncompressed) so they
3165  can be symlinked directly from /etc/munin/plugins/ .
3166
3167- Ubuntu "Hardy" was added as a supported debian platform, with a
3168  Makefile target to produce hardy .deb packages. Some notes have been
3169  added to `debian.rst`_ about building Tahoe on a debian/ubuntu
3170  system.
3171
3172- Storage servers now measure operation rates and
3173  latency-per-operation, and provides results through the /statistics
3174  web page as well as the stats gatherer. Munin plugins have been
3175  added to match.
3176
3177Other
3178-----
3179
3180- Tahoe nodes now use Foolscap "incident logging" to record unusual
3181  events to their NODEDIR/logs/incidents/ directory. These incident
3182  files can be examined by Foolscap logging tools, or delivered to an
3183  external log-gatherer for further analysis. Note that Tahoe now
3184  requires Foolscap-0.2.9, since 0.2.8 had a bug that complained about
3185  "OSError: File exists" when trying to create the incidents/
3186  directory for a second time.
3187
3188- If no servers are available when retrieving a mutable file (like a
3189  directory), the node now reports an error instead of hanging
3190  forever. Earlier releases would not only hang (causing the wapi
3191  directory listing to get stuck half-way through), but the internal
3192  dirnode serialization would cause all subsequent attempts to
3193  retrieve or modify the same directory to hang as well. `#463`_
3194
3195- A minor internal exception (reported in logs/twistd.log, in the
3196  "stopProducing" method) was fixed, which complained about
3197  "self._paused_at not defined" whenever a file download was stopped
3198  from the web browser end.
3199
3200.. _#463: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/463
3201.. _#491: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/491
3202.. _debian.rst: docs/debian.rst
3203
3204Release 1.1.0 (2008-06-11)
3205''''''''''''''''''''''''''
3206
3207CLI: new "alias" model
3208----------------------
3209
3210- The new CLI code uses an scp/rsync -like interface, in which
3211  directories in the Tahoe storage grid are referenced by a
3212  colon-suffixed alias. The new commands look like:
3213
3214 - tahoe cp local.txt tahoe:virtual.txt
3215 - tahoe ls work:subdir
3216
3217- More functionality is available through the CLI: creating unlinked
3218  files and directories, recursive copy in or out of the storage grid,
3219  hardlinks, and retrieving the raw read- or write- caps through the
3220  'ls' command. Please read `CLI.rst`_ for complete details.
3221
3222wapi: new pages, new commands
3223-----------------------------
3224
3225- Several new pages were added to the web API:
3226
3227 - /helper_status : to describe what a Helper is doing
3228 - /statistics : reports node uptime, CPU usage, other stats
3229 - /file : for easy file-download URLs, see `#221`_
3230 - /cap == /uri : future compatibility
3231
3232- The localdir=/localfile= and t=download operations were
3233  removed. These required special configuration to enable anyways, but
3234  this feature was a security problem, and was mostly obviated by the
3235  new "cp -r" command.
3236
3237- Several new options to the GET command were added:
3238
3239 -  t=deep-size : add up the size of all immutable files reachable from the directory
3240 -  t=deep-stats : return a JSON-encoded description of number of files, size distribution, total size, etc
3241
3242- POST is now preferred over PUT for most operations which cause
3243  side-effects.
3244
3245- Most wapi calls now accept overwrite=, and default to overwrite=true
3246
3247- "POST /uri/DIRCAP/parent/child?t=mkdir" is now the preferred API to
3248  create multiple directories at once, rather than ...?t=mkdir-p .
3249
3250- PUT to a mutable file ("PUT /uri/MUTABLEFILECAP", "PUT
3251  /uri/DIRCAP/child") will modify the file in-place.
3252
3253- more munin graphs in misc/munin/
3254
3255 - tahoe-introstats
3256 - tahoe-rootdir-space
3257 - tahoe_estimate_files
3258 - mutable files published/retrieved
3259 - tahoe_cpu_watcher
3260 - tahoe_spacetime
3261
3262New Dependencies
3263----------------
3264-  zfec 1.1.0
3265-  foolscap 0.2.8
3266-  pycryptopp 0.5
3267-  setuptools (now required at runtime)
3268
3269New Mutable-File Code
3270---------------------
3271
3272- The mutable-file handling code (mostly used for directories) has
3273  been completely rewritten. The new scheme has a better API (with a
3274  modify() method) and is less likely to lose data when several
3275  uncoordinated writers change a file at the same time.
3276
3277- In addition, a single Tahoe process will coordinate its own
3278  writes. If you make two concurrent directory-modifying wapi calls to
3279  a single tahoe node, it will internally make one of them wait for
3280  the other to complete. This prevents auto-collision (`#391`_).
3281
3282- The new mutable-file code also detects errors during publish
3283  better. Earlier releases might believe that a mutable file was
3284  published when in fact it failed.
3285
3286other features
3287--------------
3288
3289- The node now monitors its own CPU usage, as a percentage, measured
3290  every 60 seconds. 1/5/15 minute moving averages are available on the
3291  /statistics web page and via the stats-gathering interface.
3292
3293- Clients now accelerate reconnection to all servers after being
3294  offline (`#374`_). When a client is offline for a long time, it
3295  scales back reconnection attempts to approximately once per hour, so
3296  it may take a while to make the first attempt, but once any attempt
3297  succeeds, the other server connections will be retried immediately.
3298
3299- A new "offloaded KeyGenerator" facility can be configured, to move
3300  RSA key generation out from, say, a wapi node, into a separate
3301  process. RSA keys can take several seconds to create, and so a wapi
3302  node which is being used for directory creation will be unavailable
3303  for anything else during this time. The Key Generator process will
3304  pre-compute a small pool of keys, to speed things up further. This
3305  also takes better advantage of multi-core CPUs, or SMP hosts.
3306
3307- The node will only use a potentially-slow "du -s" command at startup
3308  (to measure how much space has been used) if the "sizelimit"
3309  parameter has been configured (to limit how much space is
3310  used). Large storage servers should turn off sizelimit until a later
3311  release improves the space-management code, since "du -s" on a
3312  terabyte filesystem can take hours.
3313
3314- The Introducer now allows new announcements to replace old ones, to
3315  avoid buildups of obsolete announcements.
3316
3317- Immutable files are limited to about 12GiB (when using the default
3318  3-of-10 encoding), because larger files would be corrupted by the
3319  four-byte share-size field on the storage servers (`#439`_). A later
3320  release will remove this limit. Earlier releases would allow >12GiB
3321  uploads, but the resulting file would be unretrievable.
3322
3323- The docs/ directory has been rearranged, with old docs put in
3324  docs/historical/ and not-yet-implemented ones in docs/proposed/ .
3325
3326- The Mac OS-X FUSE plugin has a significant bug fix: earlier versions
3327  would corrupt writes that used seek() instead of writing the file in
3328  linear order.  The rsync tool is known to perform writes in this
3329  order. This has been fixed.
3330
3331.. _#221: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/221
3332.. _#374: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/374
3333.. _#391: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/391
3334.. _#439: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/439
3335.. _CLI.rst: docs/CLI.rst
Note: See TracBrowser for help on using the repository browser.