source: trunk/NEWS.rst

Last change on this file was 51e9fcab, checked in by meejah <meejah@…>, at 2024-01-18T23:03:12Z

fixups from review (thanks itamarst)

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